Symfony2 - Twig - How can I send parameters to the parent template?

Solution 1:

Here is a simple example:

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' %}

Output from rendering page2.html.twig:

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

Solution 2:

A better way that I just discovered is the basic approach by checking the route for the shortcut route name:

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

Or another way is to name all your route shortcut names according to the group it belongs to. For example all the routes from your products controller start with "product_...." and then in the template you can do this:

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