Язык Symfony2 игнорируется для шаблона базовой ветки

Я устанавливаю язык на слушателя, слушающего 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 %}

Контроллер маршрута отобразит 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.

0

Решение

Рабочий раствор: Создал LocaleListener точно так же, как описано Вот (подсказка Йоши).

добавление: Я хотел, чтобы использовалась локаль, хранящаяся в сущности пользователя, поэтому мне пришлось создать InteractiveLoginListener (файл класса). Начиная с версии 1.3.6, есть (например, 2.0-альфа, хотя и не документировано) событие, называемое 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' }
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]