src/EventSubscriber/CheckLocaleSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Service\LocaleService;
  4. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  5. use Symfony\Component\HttpKernel\Event\RequestEvent;
  6. use Symfony\Component\HttpFoundation\RequestStack;
  7. use Symfony\Component\HttpKernel\HttpKernelInterface;
  8. use Symfony\Contracts\Translation\TranslatorInterface;
  9. class CheckLocaleSubscriber
  10. {
  11.   /**
  12.    * @var RequestStack
  13.    */
  14.   private $requestStack;
  15.   /**
  16.    * @var TranslatorInterface
  17.    */
  18.   private $translator;
  19.   /**
  20.    * @var LocaleService
  21.    */
  22.   private $localeService;
  23.   /**
  24.    * @var LocaleService $localeService
  25.    */
  26.   public function __construct(RequestStack $requestStackTranslatorInterface $translatorLocaleService $localeService)
  27.   {
  28.       $this->requestStack $requestStack;
  29.       $this->translator $translator;
  30.       $this->localeService $localeService;
  31.   }
  32.   public function onKernelController(ControllerEvent $event)
  33.   {
  34.     $request $event->getRequest();
  35.     $locale $request->attributes->get('_locale');
  36.     $locales $this->localeService->getLocales();
  37.     if (!in_array($locale$locales)) {
  38.       $locale $this->localeService->getDefaultLocale();
  39.     }
  40.     $request->attributes->set('_locale'$locale);
  41.     if (is_array($request->attributes->get('_route_params'))) {
  42.       $request->attributes->set('_route_params'array_merge($request->attributes->get('_route_params'), ['_locale' => $locale]));
  43.     }
  44.     $this->translator->setLocale($locale);
  45.     if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
  46.       $request->setLocale($locale);
  47.     }
  48.   }
  49. }