有没有办法在 Symfony2中 设置基于主机名的路由?
在官方文档中没有找到关于此主题的任何信息。 http://symfony.com/doc/2.0/book/routing.html
我想基于给定的主机名路由请求:
foo.example.com bar.example.com {{subdomain}}。example.com
因此,从本质上讲,控制器将获得作为参数传递的当前子域。
$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));
我希望这是可能的,而我只是以某种方式错过了它。 提前致谢!
这是我的解决方案:
在config.yml内部应用程序目录中添加以下行:
config.yml
services: kernel.listener.subdomain_listener: class: Acme\DemoBundle\Listener\SubdomainListener tags: - { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
然后将类创建SubdomainListener.php为:
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()); } }