use*_*736 24 php routing symfony
有没有办法在Symfony2中设置基于主机名的路由?
我在官方文档中没有找到关于这个主题的任何内容.
http://symfony.com/doc/2.0/book/routing.html
我想根据给定的主机名路由请求:
foo.example.com
bar.example.com
{{subdomain}}.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));
Run Code Online (Sandbox Code Playgroud)
我希望这是可能的,我只是错过了它.
提前致谢!
Dan*_*ows 42
只是要指出现在已经在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 }
Run Code Online (Sandbox Code Playgroud)
Ale*_*nko 25
这是我的解决方案:
在config.yml
内部应用程序目录中添加以下行:
services:
kernel.listener.subdomain_listener:
class: Acme\DemoBundle\Listener\SubdomainListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
Run Code Online (Sandbox Code Playgroud)
然后创建类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());
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20561 次 |
最近记录: |