<?php
namespace App\Subscribers;
use App\RequestMapper\RequestMapper;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;
class UserLocaleSubscriber implements EventSubscriberInterface
{
private RequestStack $session;
private RequestMapper $requestMapper;
/**
* @param RequestStack $session
*/
public function __construct(RequestStack $session, RequestMapper $requestMapper)
{
$this->requestMapper = $requestMapper;
$this->session = $session;
}
public function onLogin(InteractiveLoginEvent $interactiveLoginEvent){
$user = $interactiveLoginEvent->getAuthenticationToken()->getUser();
if($user->getLocale()){
$this->session->getSession()->set('_locale', $user->getLocale());
}
}
public static function getSubscribedEvents()
{
return [
SecurityEvents::INTERACTIVE_LOGIN => [
['onLogin', 15]
],
KernelEvents::CONTROLLER_ARGUMENTS => [
['onController', 20]
]
];
}
public function onController(ControllerArgumentsEvent $controllerEvent)
{
if($controllerEvent->isMainRequest()) {
$this->requestMapper->setParametersToObject($controllerEvent);
}
}
}