Intereting Posts
Неправильная загрузка нескольких изображений Php проанализировал таблицу html и подсчитал значение <td>, похожее на другое php отправлять электронную почту с помощью gmail smtp Получите звание, основанное на баллах, из неупорядоченной базы данных MySql, когда ему дали имя пользователя Работа с символами GD (imagettftext ()) и UTF-8 Поля сущности Symfony2, относящиеся к другому объекту Как включить PHP-файл на страницы SHTML? Удаление index.php в CodeIgniter просто работает для URL-адреса контроллера по умолчанию Конвертировать временную метку Windows на сегодняшний день с помощью PHP на Linux-боксе PHP – удалить запятую из последнего цикла получить текущий контроллер Symfony2 Twig, включая заголовок с неработающими активами Предупреждение: mysql_result (): предоставленный аргумент не является допустимым ресурсом результата MySQL в (…) в строке 4 Прямая печать веб-страницы в файле PDF PHP / MySql Несколько выпадающих списков не нужны значения параметров, видимые в источнике страницы

Динамические поддомены Symfony

Я пытаюсь сопоставить поддомены с идентификатором клиента в symfony.

т.е. у меня есть customer1.example.com и customer2.example.com

Домены хранятся в таблице.

Когда пользователь переходит к customer1.example.com, я хотел бы получить субдомен, найти доменное имя в базе данных, после его сопоставления он затем разворачивает конфигурацию приложения для этого клиента, а затем сохраняет client_Id в глобальном атрибуте поэтому я точно знаю, с каким клиентом я имею дело с полным приложением. Виртуальный хост будет иметь соответствующее имя сервера подстановочных знаков.

Вам удалось добиться этого, и если да, то как? Если нет, любые идеи были бы большой помощью!

Я думаю об использовании фильтра для этого.

🙂

также вам понадобится установить ваш домен в качестве подстановочного домена, если вам не потребуется вручную создавать каждый поддомен на клиент.

другое решение, которое не так зависит от симфонии, использует .htaccess

<IfModule mod_rewrite.c> Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !www.domain.com$ [NC] RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC] RewriteRule (.*) $1?sub=%2&page=$1&domain=%{HTTP_HOST} [QSA,L] <IfModule> 

этот код в основном отправит на запрошенную страницу субдомен, домен и запрашиваемую страницу. то в php вы можете проверить, совпадает ли он с вашим именем пользователя вашего клиента. и вы также можете одновременно использовать припаркованные домены для своих клиентов.

Я надеюсь, что это помогает.

Поскольку вы хотите загрузить другое приложение, фильтр не поможет. Просто используйте frontcontroller (index.php), чтобы извлечь субдомен, и если каталог приложения существует, загрузите приложение (еще 404). Вы даже можете сохранить идентификатор в конфигурации приложения.

Я делаю что-то подобное. Заметьте, я не пробовал эту точную настройку.

 $tokens = explode('.', $_SERVER['SERVER_NAME'], 2); $app = $tokens[0] == 'www' ? 'default' : $tokens[0]; //assumes you aren't allowing www.app.example.com, change if you are try { $appConfiguration = ProjectConfiguration::getApplicationConfiguration($app, 'prod', false); } catch(InvalidArgumentException $e) //thrown if app doesn't exist { $fallbackConfiguration = ProjectConfiguration::getApplicationConfiguration('default', 'prod', false); $context = sfContext::createInstance($fallbackConfiguration); $request = $context->getRequest(); $request->setParameter('module', 'default'); //set what route you want an invalid app to go to here $request->setParameter('action', 'invalidApplication'); $context->dispatch(); } if (isset($appConfiguration)) { sfContext::createInstance($appConfiguration)->dispatch(); } 

Взгляните на sfDomainRoutePlugin – он делает то, что вы хотите. Однако в его текущей версии вы не получаете функции Propel или DoctrineRoute, что означает, что вы должны вручную искать клиента на основе параметра субдомена, возвращаемого из плагина. Пример:

приложение / интерфейс / конфигурации / routing.yml

 # pick up the homepage homepage: url: / class: sfDomainRoute param: { module: homepage, action: index } requirements: sf_host: [www.example.com, example.com] # catch subdomains for customers customer_subdomain: url: / class: sfDomainRoute param: { module: customer, action: index } страница # pick up the homepage homepage: url: / class: sfDomainRoute param: { module: homepage, action: index } requirements: sf_host: [www.example.com, example.com] # catch subdomains for customers customer_subdomain: url: / class: sfDomainRoute param: { module: customer, action: index } 

приложение / интерфейс / модули / клиент / actions.class.php

 public function executeIndex(sfWebRequest $request) { // get the subdomain parameter $this->subdomain = $request->getParameter('subdomain'); // retrieve customer (you have to create the retrieveBySubdomain method) $this->customer = CustomerPeer::retrieveBySubdomain($this->subdomain); } 

Это всего лишь пример, но я сам использую подобный подход, и плагин делает то, что рекламируется. Удачи.

Если вы предприимчивы, yuo может взглянуть на главу 2 в «More with symfony book». Это поможет вам понять код в sfDomainRoutePlugin.