src/Events/LocaleSubscriber.php line 19

  1. <?php
  2. // src/AppBundle/EventSubscriber/LocaleSubscriber.php
  3. namespace App\Events;
  4.  
  5. use Symfony\Component\HttpKernel\KernelEvents;
  6. use Symfony\Component\HttpKernel\Event\RequestEvent;
  7. // use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9.  
  10. class LocaleSubscriber implements EventSubscriberInterface
  11. {
  12.     private $defaultLocale;
  13.  
  14.     public function __construct($defaultLocale 'fr')
  15.     {
  16.         $this->defaultLocale $defaultLocale;
  17.     }
  18.  
  19.     public function onKernelRequest(RequestEvent $event)
  20.     {
  21.         $request $event->getRequest();
  22.         if (!$request->hasPreviousSession()) {
  23.             return;
  24.         }
  25.  
  26.         // try to see if the locale has been set as a _locale routing parameter
  27.         if ($locale $request->attributes->get('_locale')) {
  28.             $request->getSession()->set('_locale'$locale);
  29.         } else {
  30.             // if no explicit locale has been set on this request, use one from the session
  31.             $request->setLocale($request->getSession()->get('_locale'$this->defaultLocale));
  32.         }
  33.     }
  34.  
  35.     public static function getSubscribedEvents(): array
  36.     {
  37.         return array(
  38.             // must be registered after the default Locale listener
  39.             KernelEvents::REQUEST => array(array('onKernelRequest'15)),
  40.         );
  41.     }
  42. }