src/EventSubscriber/LocaleSubscriber.php line 56

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Thomas HERISSON (contact@scaledev.fr)
  4.  * @copyright 2021 - ScaleDEV SAS, 12 RUE CHARLES MORET, 10120 ST ANDRE LES VERGERS
  5.  * @license commercial
  6.  */
  7. declare(strict_types=1);
  8. namespace App\EventSubscriber;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpKernel\Event\RequestEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. class LocaleSubscriber implements EventSubscriberInterface
  13. {
  14.     private string $defaultLocale;
  15.     /**
  16.      * @param string $defaultLocale
  17.      */
  18.     public function __construct(string $defaultLocale 'en')
  19.     {
  20.         $this->defaultLocale $defaultLocale;
  21.     }
  22.     /**
  23.      * @return array
  24.      */
  25.     public static function getSubscribedEvents(): array
  26.     {
  27.         return [
  28.             // must be registered before (i.e. with a higher priority than) the default Locale listener
  29.             KernelEvents::REQUEST => [['onKernelRequest'20]]
  30.         ];
  31.     }
  32.     /**
  33.      * @param RequestEvent $event
  34.      * @return void
  35.      */
  36.     public function onKernelRequest(RequestEvent $event): void
  37.     {
  38.         $request $event->getRequest();
  39.         if (!$request->hasPreviousSession()) {
  40.             return;
  41.         }
  42.         // try to see if the locale has been set as a _locale routing parameter
  43.         if ($locale $request->attributes->get('_locale')) {
  44.             $request->getSession()->set('_locale'$locale);
  45.         } else {
  46.             // if no explicit locale has been set on this request, use one from the session
  47.             $request->setLocale($request->getSession()->get('_locale'$this->defaultLocale));
  48.         }
  49.     }
  50. }