gpt4 book ai didi

symfony - 用户语言环境在第一次请求时不起作用

转载 作者:行者123 更新时间:2023-12-04 04:42:46 24 4
gpt4 key购买 nike

我的网站正在运行 Symfony 大师版。到目前为止,我可以使用 LocalListener logic来自网站,由于代码与我的版本不兼容,因此略有不同。 (我认为)我只是简化了 onKernelRequest 这样的方法:

public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
return;
}

if ($locale = $request->get('_locale')) {
$request->getSession()->set('_locale', $locale);
}
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}

这样,我可以在我的页面上放置一个简单的语言选择器,使用 these paths ,并且新语言将在第一次请求时应用。 (如果我离开“else”条件就不会发生)

然后我想考虑存储在用户帐户中的语言环境,以防用户登录并在他或她的个人资料中指定了语言环境。所以我在函数中添加了这段代码:
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
if (!$request->hasPreviousSession()) {
return;
}

$token = $this->container->get('security.context')->getToken();
if (is_object($token)) {
$user = $token->getUser();
if (is_object($user)) {
$userlocale = $user->getLocale();
if ($userlocale) {
$request->getSession()->set('_locale', $userlocale);
$request->setLocale($userlocale);
return;
}
}
}

if ($locale = $request->get('_locale')) {
$request->getSession()->set('_locale', $locale);
}
$request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
}

(编辑:抱歉缩进不好,不知何故stackoverflow不想正确缩进......)

基本上它会检查用户是否已登录,如果有,则他或她是否设置了语言环境,如果有,则将语言环境设置为用户语言环境。现在这有效,但......不是立即。每当我登录或更改我的个人资料中的语言环境时,我进入的下一页仍然是之前设置的语言环境。只有当我加载新页面时,它才会正确更改其翻译,并在下一个请求中保持这种状态。

所以这是我的问题:我是否应该添加一些内容来使这些更改发生在登录后和配置文件编辑后的请求中?

最佳答案

您不仅需要设置新的语言环境,还需要在执行此操作后重定向用户以使更改生效。

另外,it's not a good practice to store the locale in the session — you should keep the locale in the URL .这样,重定向到具有适当语言环境的 URL 就更有意义了。

关于symfony - 用户语言环境在第一次请求时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18648320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com