Маршрутизация Symfony2 – субдомены маршрутов

Есть ли способ настроить маршрутизацию на основе имени хоста в Symfony2 ?

Я не нашел ничего об этой теме в официальной документации.
http://symfony.com/doc/2.0/book/routing.html

Я хочу направить запрос на основе данного имени хоста:
foo.example.com
bar.example.com
{{}} Подобласть. Example.com

Таким образом, по существу, контроллер получит текущий субдомен, переданный как параметр.

Подобно решению Zend:
http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.hostname

$hostnameRoute = new Zend_Controller_Router_Route_Hostname( ':username.users.example.com', array( 'controller' => 'profile', 'action' => 'userinfo' ) ); $plainPathRoute = new Zend_Controller_Router_Route_Static(''); $router->addRoute('user', $hostnameRoute->chain($plainPathRoute)); 

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

Solutions Collecting From Web of "Маршрутизация Symfony2 – субдомены маршрутов"

Это мое решение:

В config.yml внутри приложения dir добавьте следующие строки:

 services: kernel.listener.subdomain_listener: class: Acme\DemoBundle\Listener\SubdomainListener tags: - { name: kernel.event_listener, event: kernel.request, method: onDomainParse } 

Затем создайте класс SubdomainListener.php как:

 <?php namespace Acme\DemoBundle\Listener; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\Event; class SubdomainListener { public function onDomainParse(Event $event) { $request = $event->getRequest(); $session = $request->getSession(); // todo: parsing subdomain to detect country $session->set('subdomain', $request->getHost()); } } 

Просто отметим, что это теперь добавлено в Symfony v2.2 – http://symfony.com/doc/master/components/routing/hostname_pattern.html .

 mobile_homepage: path: / host: m.{domain} defaults: { _controller: AcmeDemoBundle:Main:mobileHomepage } requirements: domain: %domain% homepage: path: / defaults: { _controller: AcmeDemoBundle:Main:homepage } страница mobile_homepage: path: / host: m.{domain} defaults: { _controller: AcmeDemoBundle:Main:mobileHomepage } requirements: domain: %domain% homepage: path: / defaults: { _controller: AcmeDemoBundle:Main:homepage } 

Альтернативно получить имя хоста в контроллере:

 class DefaultController extends PowmaController { /** * @Route("/test") */ public function testAction() { return new Response( 'Hostname ' . $this->getRequestHostnameString() ); } function getRequestHostnameString() { return $this->getRequest()->getHost(); } 

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

Я устанавливаю атрибут запроса: _controller, в этом прослушивателе ядра

 $request->attributes->set('_controller','AcmeBundle:Demo:main'); 

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

Для Symfony 1.2 есть плагин, который добавляет эту функциональность. Код составляет всего несколько сотен строк в одном файле и не должен быть слишком разным для порта Symfony 2. Но документация от Sensio еще не совсем там.

Вы также не можете включить субдомен в маршрут и получить домен от контроллера и обработать его там. Я думаю, что это такой метод: getHost ()

Вот пакет, который обрабатывает несколько доменных сайтов: https://github.com/AppVentus/MultiDomainBundle