It turned out also more or less the same: Actually, there are no problems, but after logging in there is some redirection, so the profiler never shows the actual request that the interactive login logger starts.
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent, Symfony\Component\Security\Http\Event\FilterControllerEvent, Symfony\Component\HttpKernel\Event\GetResponseEvent, Symfony\Component\HttpKernel\HttpKernelInterface; use FOS\UserBundle\Entity\User as BaseUser; class LocaleListener { protected $container; protected $availableLocales; public function __construct(\Symfony\Component\DependencyInjection\Container $container, $availableLocales) { $this->container = $container; $this->availableLocales = $availableLocales; } public function onKernelRequest(GetResponseEvent $event) { $request = $event->getRequest(); $locale = $request->getPreferredLanguage($this->availableLocales); $session = $request->getSession(); $token = $this->container->get('security.context')->getToken(); if( is_object( $token ) ) { $user = $token->getUser(); if ($user instanceof BaseUser) { $locale = $user->getLocale(); } } $session = $this->container->get('session'); $session->set('_locale', $locale); $request->setLocale($locale); } }
In services.yml:
user.locales.kernel_request_listener: class: Acme\UserBundle\EventListener\LocaleListener arguments: [ @service_container, [ 'en', 'fr', 'ru' ] ] tags: [{ name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: -255 }]
source share