Explorar o código

[FrameworkBundle] fixed _locale management in core.request

Fabien Potencier %!s(int64=14) %!d(string=hai) anos
pai
achega
8457bfa365

+ 11 - 7
src/Symfony/Bundle/FrameworkBundle/EventListener/RouterListener.php

@@ -61,10 +61,6 @@ class RouterListener
             $request->isSecure() ? $request->getPort() : $this->httpsPort
         );
 
-        if ($session = $request->getSession()) {
-            $context->setParameter('_locale', $session->getLocale());
-        }
-
         $this->router->setContext($context);
     }
 
@@ -100,9 +96,17 @@ class RouterListener
             throw new MethodNotAllowedHttpException($e->getAllowedMethods(), $message, $e);
         }
 
-        if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType() && $locale = $request->attributes->get('_locale')) {
-            $request->getSession()->setLocale($locale);
-            $this->router->getContext()->setParameter('_locale', $locale);
+        if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
+            $context = $this->router->getContext();
+            $session = $request->getSession();
+            if ($locale = $request->attributes->get('_locale')) {
+                if ($session) {
+                    $session->setLocale($locale);
+                }
+                $context->setParameter('_locale', $locale);
+            } elseif ($session) {
+                $context->setParameter('_locale', $session->getLocale());
+            }
         }
     }