Symfony: Set session locale from user's configured locale at login
services:
listener.user_locale:
class: AppBundle\EventListener\UserLocaleListener
arguments: ['@session', '@router']
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }
<?php
namespace AppBundle\EventListener;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class UserLocaleListener
{
/**
* @var Session
*/
private $session;
/**
* @var Router
*/
private $router;
/**
* @param Session $session
* @param Router $router
*/
public function __construct(Session $session, Router $router)
{
$this->session = $session;
$this->router = $router;
}
/**
* @param InteractiveLoginEvent $event
*/
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
/** @var \BilletterieBundle\Entity\User $user */
$user = $event->getAuthenticationToken()->getUser();
if (null !== $user->getLocale()) {
$this->session->set('_locale', $user->getLocale());
}
}
}