<?php
/**
* Created by PhpStorm.
* User: uwethiess
* Date: 30.01.17
* Time: 14:28
*/
namespace App\EventListener;
use App\Entity\User;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Security;
class UserLanguageListener
{
/** @var TokenStorage */
private $storage;
/** @var RouterInterface */
private $router;
/** @var Security $security */
private $security;
public function __construct(TokenStorageInterface $storage, RouterInterface $router, Security $security)
{
$this->storage = $storage;
$this->router = $router;
$this->security = $security;
}
public function onKernelController(ControllerEvent $event) {
$controller = $event->getController();
if (!is_array($controller)) {
return;
}
if ($this->storage->getToken() === null) {
return;
}
/** @var User $user */
$user = $this->storage->getToken()->getUser();
$request = $event->getRequest();
//only check when user is logged on
if ($user instanceof User && $user->getId()) {
$locale = $user->getLocale();
if ($locale !== $request->attributes->get('_locale') && $request->attributes->get('_locale') !== null) {
$route_params = $request->get('_route_params');
if (!is_array($route_params)) {
$route_params = [];
}
$redirectUrl = $this->router->generate($request->get('_route'), array_merge($route_params, ['_locale' => $locale]));
$event->setController(
function () use ($redirectUrl) {
return new RedirectResponse($redirectUrl);
}
);
}
}
}
}