<?php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Contracts\Translation\TranslatorInterface;
class LocaleSubscriber implements EventSubscriberInterface
{
private $defaultLocale;
public function __construct(string $defaultLocale = 'en', Security $security, TokenStorageInterface $ts, TranslatorInterface $trans)
{
$this->defaultLocale = $defaultLocale;
$this->trans = $trans;
$this->security = $security;
$this->tokenStorage = $ts;
}
public function onKernelRequest(ControllerEvent $event)
{
$request = $event->getRequest();
if (!$event->isMainRequest()) {
return;
}
if (!$token = $this->tokenStorage->getToken()) {
return ;
}
if (!$token->isAuthenticated()) {
return ;
}
if (!$user = $token->getUser()) {
return ;
}
$request->setLocale(strtolower($token->getUser()->getUsuIdioma()));
$this->trans->setLocale(strtolower($token->getUser()->getUsuIdioma()));
}
public static function getSubscribedEvents()
{
return [
//KernelEvents::REQUEST => [['onKernelController', 20]],
//'kernel.request' => 'onKernelRequest',
KernelEvents::CONTROLLER => ['onKernelRequest', -120]
];
}
}