web-dev-qa-db-fra.com

Symfony2 - Twig - Comment envoyer des paramètres au modèle parent?

Je travaille sur un projet PHP utilisant Symfony2 avec Twig modèle), et je ne trouve pas de solution à ce problème.

J'ai un pack d'administration et tous les modèles s'étendent de la base d'administration qui a un modèle principal avec un menu.

Je dois définir l'onglet actuel du menu dans le modèle de base de la page sur sélectionné lorsque l'utilisateur est sur cette page.

Existe-t-il un moyen de passer le paramètre au modèle de base via étend ?

46
Germán Lena

Voici un exemple simple:

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

Sortie du rendu page2.html.twig:

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

Une meilleure façon que je viens de découvrir est l'approche de base en vérifiant l'itinéraire pour le nom de l'itinéraire de raccourci:

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

Ou une autre façon consiste à nommer tous les noms de raccourcis de votre itinéraire en fonction du groupe auquel il appartient. Par exemple, toutes les routes à partir de votre contrôleur de produits commencent par "produit _....", puis dans le modèle, vous pouvez le faire:

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