2013-06-21 18 views
39

Sto lavorando a un progetto PHP che utilizza Symfony2 con Twig templating e non riesco a trovare una soluzione per questo problema.Symfony2 - Twig - Come posso inviare parametri al modello principale?

Ho un pacchetto di amministrazione e tutti i modelli si estendono dalla base di amministrazione che ha un modello principale con un menu.

Devo impostare la scheda corrente del menu nel modello di base della pagina da selezionare quando l'utente si trova su quella pagina.

Esiste un modo per passare il parametro al modello di base tramite extends?

risposta

67

Ecco un semplice esempio:

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

uscita da page2.html di rendering .twig:

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

Grande! Grazie mille! –

+0

@ GermánLena Siete i benvenuti :) – Paulpro

+15

Solo una nota (come ho inciampato su questo me stesso) se si imposta la variabile all'interno della base, quindi i modelli ereditari non saranno in grado di sovrascriverlo. – carbontwelve

0

Un modo migliore che ho appena scoperto è l'approccio di base controllando il percorso per il nome della rotta scelta rapida:

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

O un altro modo è quello di nominare tutti i nomi di scelta rapida del percorso in base al gruppo di appartenenza . Ad esempio, tutti i percorsi dal controller dei prodotti iniziano con "prodotto _...." e quindi nel modello è possibile eseguire questa operazione:

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