我的翻译问题。我用
我创建了交互式登录监听器,当用户登录应用程序时,我获得了用户区域设置并设置了会话_locale,但这在sonata中被忽略。
听众
class UserLocaleListener {
/**
* @var Session
*/
private $container;
public function __construct(Session $session)
{
$this->session = $session;
}
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
$request = $event->getRequest();
$user = $event->getAuthenticationToken()->getUser();
if (null !== $user->getLocale()) {
$this->session->set('_locale', $user->getLocale());
//$request->setLocale($user->getLocale());
var_dump($request->getSession()->get('_locale'));
}
}
}
在service.yml中添加
app.user_locale_listener:
class: xxxxxx\xxxxxxxx\EventListener\UserLocaleListener
arguments: ["@session"]
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onInteractiveLogin }
我的错误在哪里?
答案 0 :(得分:0)
语言环境在请求中设置,并且不会“粘住”,因此每次请求它都将是默认值,除非您执行以下操作:
http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html
将在每个请求中,从会话中获取区域设置,并将其设置为当前请求。
(确保LocaleListener的优先级低于UserLocaleListener,以便它在它之后运行)