symfony在登录期间更改路由中的区域设置

时间:2015-10-02 09:44:18

标签: php symfony login routes locale

我在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中的区域设置?

非常感谢任何提示。

1 个答案:

答案 0 :(得分:0)

正如我解释here

区域设置是根据请求设置的,并且不会"坚持" ,所以每次请求它都将是默认值,除非你做这样的事情:

http://symfony.com/doc/current/cookbook/session/locale_sticky_session.html