src/EventListener/LocaleListener.php line 33

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  4. use Symfony\Component\HttpKernel\Event\RequestEvent;
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. /**
  7.  * Taken from http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html
  8.  * Makes the locale "sticky", meaning that it is set at the first request
  9.  * and not each time a new request is created.
  10.  *
  11.  * Callable by service vp_auto.locale.listener
  12.  */
  13. class LocaleListener implements EventSubscriberInterface
  14. {
  15.     public function __construct(private $defaultLocale 'fr')
  16.     {
  17.     }
  18.     public function onKernelRequest(RequestEvent $event): void
  19.     {
  20.         $request $event->getRequest();
  21.         // if session is already set, do nothing
  22.         if (!$request->hasPreviousSession()) {
  23.             return;
  24.         }
  25.         // try to see if the locale has been set as a _locale routing parameter
  26.         if ($locale $request->attributes->get('_locale')) {
  27.             $request->getSession()->set('_locale'$locale);
  28.         } else {
  29.             // if no explicit locale has been set on this request, use one from the session
  30.             $request->setLocale($request->getSession()->get('_locale'$this->defaultLocale));
  31.         }
  32.     }
  33.     public static function getSubscribedEvents()
  34.     {
  35.         return [
  36.             // must be registered before the default Locale listener
  37.             KernelEvents::REQUEST => [['onKernelRequest'17]],
  38.         ];
  39.     }
  40. }