Symfony2 - Twig - Как отправить параметры родительскому шаблону?

Я работаю над проектом PHP, используя Symfony2 с шаблоном Twig, и я не могу найти решение этой проблемы.

У меня есть пакет администрирования, и все шаблоны распространяются от базы admin, которая имеет мастер-шаблон с меню.

Мне нужно установить текущую вкладку меню в базовом шаблоне страницы на выбранную, когда пользователь находится на этой странице.

Есть ли способ передать параметр базовому шаблону через extends?

Ответ 1

Вот простой пример:

base.html.twig

{# base.html.twig #}
...
<ul>
  <li{% if menu_selected|default('one') == 'one' %} class="selected"{% endif %}>One</li>
  <li{% if menu_selected == 'two' %} class="selected"{% endif %}>Two</li>
  <li{% if menu_selected == 'three' %} class="selected"{% endif %}>Three</li>
</ul>
...

page2.html.twig

{# page2.html.twig #}
{% extends 'YourBundle::base.html.twig' %}

{% set menu_selected = 'two' %}

Выход из рендеринга page2.html.twig:

<ul>
  <li>One</li>
  <li class="selected">Two</li>
  <li>Three</li>
</ul>

Ответ 2

Лучшим способом, который я только что обнаружил, является базовый подход, проверяя маршрут для имени маршрута быстрого вызова:

<li class="{% if app.request.attributes.get('_route') == 'homepage' %}active{% endif %}">Home</li>

Или другой способ - назвать все имена ярлыков маршрута в соответствии с группой, к которой она принадлежит. Например, все маршруты из вашего контроллера продукта начинаются с "product _....", а затем в шаблоне вы можете это сделать:

<li class="{% if app.request.attributes.get('_route') starts with 'product' %}active{% endif %}">