Symfony2 Routing - route subdomains
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 }
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:
<?phpnamespace 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()); }}
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(); }