我在symfony(2.7)应用程序的登录事件期间遇到有关更改区域设置的问题。我正在关注粘性语言环境symfony文章http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html,但根本没有使用会话。
我正在使用每个URI仅包含一个表示的方法。因此,所有路由都包含{_locale}(并且不需要粘性语言环境的会话变量)。
我只是使用UserLocaleListener部分来获取用户区域设置并尝试将其设置为路径,就像在此github问题https://github.com/FriendsOfSymfony/FOSUserBundle/issues/829上一样。
我的问题可能是,在登录时已经是一个URI语言环境集。在登录事件期间,我需要/想要覆盖此区域设置值。正如github文章所述,我添加了路由器上下文。
UserLocaleListener InteractiveLoginEvent
/**
* @param InteractiveLoginEvent $event
*/
public function onInteractiveLogin(InteractiveLoginEvent $event)
{
$request = $event->getRequest();
$user = $event->getAuthenticationToken()->getUser();
$locale = $user->getLocale();
if (null !== $locale) {
$request->setLocale($locale);
$this->router->getContext()->setParameter('_locale', $locale);
//var_dump(); die;
}
}
不幸的是,它不起作用(至少在我的symfony 2.7上)。
如果我转储请求区域设置或路由器上下文区域设置,则会将正确的用户区域设置应用于上下文,但在重定向到 default_target_path 或任何其他路径时不会更改/应用。
onInteractiveLoginEvent 是否已经来不及更改URI中的区域设置?或者,如何在(基于表单)登录期间最好地更改URI中的区域设置?
非常感谢任何提示。
答案 0 :(得分:0)
正如我解释here
区域设置是根据请求设置的,并且不会"坚持" ,所以每次请求它都将是默认值,除非你做这样的事情:
http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html