diff --git a/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php b/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php index 38ff0f48cc21..fabda8b4daa5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php +++ b/src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php @@ -42,30 +42,36 @@ public function __construct(RouterInterface $router, $httpPort = 80, $httpsPort $this->logger = $logger; } - public function onCoreRequest(GetResponseEvent $event) + public function onEarlyCoreRequest(GetResponseEvent $event) { + if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) { + return; + } + $request = $event->getRequest(); - $master = HttpKernelInterface::MASTER_REQUEST === $event->getRequestType(); - - if ($master) { - // set the context even if the parsing does not need to be done - // to have correct link generation - $context = new RequestContext( - $request->getBaseUrl(), - $request->getMethod(), - $request->getHost(), - $request->getScheme(), - $request->isSecure() ? $this->httpPort : $request->getPort(), - $request->isSecure() ? $request->getPort() : $this->httpsPort - ); - - if ($session = $request->getSession()) { - $context->setParameter('_locale', $session->getLocale()); - } - $this->router->setContext($context); + // set the context even if the parsing does not need to be done + // to have correct link generation + $context = new RequestContext( + $request->getBaseUrl(), + $request->getMethod(), + $request->getHost(), + $request->getScheme(), + $request->isSecure() ? $this->httpPort : $request->getPort(), + $request->isSecure() ? $request->getPort() : $this->httpsPort + ); + + if ($session = $request->getSession()) { + $context->setParameter('_locale', $session->getLocale()); } + $this->router->setContext($context); + } + + public function onCoreRequest(GetResponseEvent $event) + { + $request = $event->getRequest(); + if ($request->attributes->has('_controller')) { // routing is already done return; @@ -94,7 +100,7 @@ public function onCoreRequest(GetResponseEvent $event) throw new MethodNotAllowedHttpException($e->getAllowedMethods(), $message, $e); } - if ($master && $locale = $request->attributes->get('_locale')) { + if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType() && $locale = $request->attributes->get('_locale')) { $request->getSession()->setLocale($locale); $context->setParameter('_locale', $locale); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml index de71b186680c..8f28cec1b6bc 100755 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml @@ -28,6 +28,7 @@ +