vendor/symfony/http-kernel/EventListener/LocaleListener.php line 45

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony package.
  4.  *
  5.  * (c) Fabien Potencier <[email protected]>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Symfony\Component\HttpKernel\EventListener;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\RequestStack;
  14. use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
  15. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  16. use Symfony\Component\HttpKernel\KernelEvents;
  17. use Symfony\Component\Routing\RequestContextAwareInterface;
  18. /**
  19.  * Initializes the locale based on the current request.
  20.  *
  21.  * @author Fabien Potencier <[email protected]>
  22.  */
  23. class LocaleListener implements EventSubscriberInterface
  24. {
  25.     private $router;
  26.     private $defaultLocale;
  27.     private $requestStack;
  28.     /**
  29.      * @param RequestStack                      $requestStack  A RequestStack instance
  30.      * @param string                            $defaultLocale The default locale
  31.      * @param RequestContextAwareInterface|null $router        The router
  32.      */
  33.     public function __construct(RequestStack $requestStackstring $defaultLocale 'en'RequestContextAwareInterface $router null)
  34.     {
  35.         $this->defaultLocale $defaultLocale;
  36.         $this->requestStack $requestStack;
  37.         $this->router $router;
  38.     }
  39.     public function onKernelRequest(GetResponseEvent $event)
  40.     {
  41.         $request $event->getRequest();
  42.         $request->setDefaultLocale($this->defaultLocale);
  43.         $this->setLocale($request);
  44.         $this->setRouterContext($request);
  45.     }
  46.     public function onKernelFinishRequest(FinishRequestEvent $event)
  47.     {
  48.         if (null !== $parentRequest $this->requestStack->getParentRequest()) {
  49.             $this->setRouterContext($parentRequest);
  50.         }
  51.     }
  52.     private function setLocale(Request $request)
  53.     {
  54.         if ($locale $request->attributes->get('_locale')) {
  55.             $request->setLocale($locale);
  56.         }
  57.     }
  58.     private function setRouterContext(Request $request)
  59.     {
  60.         if (null !== $this->router) {
  61.             $this->router->getContext()->setParameter('_locale'$request->getLocale());
  62.         }
  63.     }
  64.     public static function getSubscribedEvents()
  65.     {
  66.         return [
  67.             // must be registered after the Router to have access to the _locale
  68.             KernelEvents::REQUEST => [['onKernelRequest'16]],
  69.             KernelEvents::FINISH_REQUEST => [['onKernelFinishRequest'0]],
  70.         ];
  71.     }
  72. }