【发布时间】: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 行)。 -
关于优先级:你的监听器必须在
LocaleListener和TranslatorListener之后注册,所以<= 9
标签: php symfony twig listener translation