martin-damien
2/3/2016 - 4:24 PM

Symfony: Set session locale from user's configured locale at login

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());
        }
    }
}