Symfony2路由-路由子域 [英] Symfony2 Routing - route subdomains
问题描述
是否可以在 Symfony2 中设置基于主机名的路由?
Is there a way to set up hostname based routing in Symfony2?
在官方文档中我没有找到有关此主题的任何信息.
http://symfony.com/doc/2.0/book/routing.html
I didn't find anything about this topic in the official documentation.
http://symfony.com/doc/2.0/book/routing.html
我想基于给定的主机名路由请求:
foo.example.com
bar.example.com
{{subdomain}}.example.com
I want to route the request based on the given hostname:
foo.example.com
bar.example.com
{{subdomain}}.example.com
因此,从本质上讲,控制器将获得作为参数传递的当前子域.
So in essence, the controller would get the current subdomain passed as a parameter.
类似于Zend解决方案:
http://framework.zend .com/manual/en/zend.controller.router.html#zend.controller.router.routes.hostname
Similar to the Zend solution:
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));
我希望这是可能的,而我只是以某种方式错过了它.
预先感谢!
I hope that it's possible and I just missed it somehow.
Thanks in advance!
推荐答案
这是我的解决方案:
在应用程序目录中的config.yml
中,添加以下行:
In the config.yml
inside app dir add the following lines:
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());
}
}
这篇关于Symfony2路由-路由子域的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!