Symfony2 Routing - route subdomains

后端 未结 6 966
半阙折子戏
半阙折子戏 2020-11-29 19:13

Is there a way to set up hostname based routing in Symfony2?

I didn\'t find anything about this topic in the official documentation.
http://sy

相关标签:
6条回答
  • 2020-11-29 19:59

    There is a plugin for Symfony 1.2 that adds this functionality. The code is only a few hundred lines in a single file and shouldn't be too diffcult to port to Symfony 2. But the documentation from Sensio isn't quite there yet.

    You could also not include the subdomain in the route and fetch the domain from the controller and process it there. I think it's this method: getHost()

    0 讨论(0)
  • 2020-11-29 20:07

    Here is a bundle that handle multiple domain site : https://github.com/AppVentus/MultiDomainBundle

    0 讨论(0)
  • 2020-11-29 20:08

    I assume that subdomain routing in symfony2 is process of choose defined controller in according to subdomain part of hostname, and session variable is not help to resolve defined controller.

    I set request attribute: _controller, in kernel listener like this

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

    This is help to route to defined controller, but I lose debug profiler in dev environment, still I can not detect a cause

    0 讨论(0)
  • 2020-11-29 20:10

    This is my solution:

    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 }
    

    Then create the class SubdomainListener.php as:

    <?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());
       }
    }
    
    0 讨论(0)
  • 2020-11-29 20:10

    Just to point out that this is now added in 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 }
    
    0 讨论(0)
  • 2020-11-29 20:11

    Alternatively get hostname in the controller:

    class DefaultController extends PowmaController {
    
      /**
       * @Route("/test")
       */
      public function testAction() {
        return new Response( 'Hostname ' . $this->getRequestHostnameString() );
      }
    
      function getRequestHostnameString() {
        return $this->getRequest()->getHost();
      }
    
    0 讨论(0)
提交回复
热议问题