【问题标题】:Symfony2 locale ignored for base twig template基本树枝模板忽略了 Symfony2 语言环境
【发布时间】:2016-04-15 13:35:10
【问题描述】:

情况

我正在为监听kernel.request 的听众设置区域设置,如下所示:

<?php
// ...
class LocaleListener
{
    //...
    public function onKernelRequest(GetResponseEvent $event)
    {
        $request = $event->getRequest();
        if (!$event->isMasterRequest()) {
            return;
        }

        // [...] some logic to get $locale
        $request->setLocale($locale);
    }
}
?>

然后,我有两个树枝模板,一个基础模板和一个基础扩展模板。基本模板(base.html.twig):

<html>
<body>
    {{ 'some.translation'|trans({}, 'messages') }}

    {% block body %}{% endblock %}
</body>
</html>

以及基础扩展模板 (profile.html.twig):

{% extends '::base.html.twig' %}

{% block body %}
    {{ 'some.translation'|trans({}, 'messages') }}
{% endblock %}

路由的Controller会渲染profile.html.twig:

<?php
// ...
class SomeController extends Controller
{
    //...
    public function someAction()
    {
        return $this->render('::profile.html.twig');
    }
}
?>

没什么特别的,都很简单……

问题

扩展基础 (profile.html.twig) 的渲染模板正在使用侦听器中翻译集的语言环境。不幸的是,基本模板 (base.html.twig) 不是。即使我在基本模板上转储{{ dump(app.request.locale) }},它也会显示在侦听器中设置的正确语言环境...

我错过了什么?


编辑

哦,我正在使用 Symfony v2.7.11。

【问题讨论】:

  • 会不会是缓存问题?也许尝试清除app/cache/dev 和/或app/cache/prod。关于语言环境,请检查事件优先级。 Creating a LocaleListener 声明您在此处需要格外小心(参见第 36 行)。
  • 关于优先级:你的监听器必须在LocaleListenerTranslatorListener之后注册,所以&lt;= 9

标签: php symfony twig listener translation


【解决方案1】:

工作解决方案:完全按照文档中的 here(Yoshi 提示)创建 LocaleListener。

附录:我希望使用存储在用户实体中的语言环境,因此我必须创建一个InteractiveLoginListener (class file)。从 1.3.6 版开始,有一个(类似于 2.0-alpha,尽管没有记录)必须注入一个名为 security.interactive_login 的事件:

app.interactive_login_listener:
    class: AppBundle\EventListener\Security\InteractiveLoginListener
    arguments: ['@fos_user.user_manager', '@session']
    tags:
        - { name: 'kernel.event_listener', event: 'security.interactive_login', method: 'onSecurityInteractiveLogin' }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2019-10-25
    • 2011-05-27
    相关资源
    最近更新 更多