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

PhpSymfonyTwig

Php Problem Overview


I am working on a PHP project using Symfony2 with Twig templating, and I can't find a solution for this problem.

I have an admin bundle and all the templates extend from admin base which has a master template with a menu.

I need to set the current tab of the menu in the base template of the page to selected when the user is on that page.

Is there any way to pass parameter to the base template through extends?

Php Solutions


Solution 1 - Php

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 - Php

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGerm&#225;n LenaView Question on Stackoverflow
Solution 1 - PhpPaulView Answer on Stackoverflow
Solution 2 - PhppogeybaitView Answer on Stackoverflow