Germán Lena
Germán Lena

Reputation: 887

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

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?

Upvotes: 59

Views: 45065

Answers (2)

pogeybait
pogeybait

Reputation: 3145

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

Upvotes: 4

Paul
Paul

Reputation: 141927

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>

Upvotes: 100

Related Questions