src/EventSubscriber/LocaleSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Repository\UsersRepository;
  4. use Twig\Environment;
  5. use Symfony\Component\Security\Core\Security;
  6. use Symfony\Component\HttpKernel\KernelEvents;
  7. use Symfony\Component\HttpKernel\Event\RequestEvent;
  8. use Symfony\Contracts\Translation\TranslatorInterface;
  9. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  10. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class LocaleSubscriber implements EventSubscriberInterface
  13. {
  14.     private $translator;
  15.     private $session;
  16.     private $environment;
  17.     
  18.     public function __construct(TranslatorInterface $translatorSessionInterface $sessionEnvironment $environment,
  19.     private Security $security,
  20.     private UsersRepository $usersRepository
  21.     )
  22.     {
  23.         $this->translator $translator;
  24.         $this->session $session;
  25.         $this->environment $environment;
  26.     }
  27.     public function onKernelController(ControllerEvent $event)
  28.     {
  29.         $request $event->getRequest();
  30.         $locale $request->query->get('lang');
  31.         $user $this->security->getUser();
  32.         if ($locale == null) {
  33.             $locale $user?->getLang() ?? $request->getSession()->get('lang');
  34.         }
  35.         if ($locale != null) {
  36.             $request->setLocale($locale);
  37.             $this->translator->setLocale($locale);
  38.             // Optionally persist the locale for the user's session:
  39.             $request->getSession()->set('lang'$locale); 
  40.             if($user && $user->getLang() != $locale){
  41.                 $this->usersRepository->changeLang($user,$locale);
  42.             }
  43.         }
  44.         
  45.     }
  46.     public static function getSubscribedEvents()
  47.     {
  48.         return [
  49.             KernelEvents::CONTROLLER => 'onKernelController',
  50.         ];
  51.     }
  52. }