2011-10-03 20 views
13

Non riesco a capire la differenza tra macro e include in Twig: entrambi sembrano fare la stessa roba, cioè prendere alcune variabili e produrre qualcosa.Twig macro VS include?

Qual è la differenza e perché si utilizza macro o include?

risposta

16

Con include, si dovrebbe includere un intero modello, testualmente. Quel modello avrebbe accesso a qualsiasi variabile di template attualmente in ambito.

Con i macro, si definisce un tipo di funzione all'interno di Twig (da non confondere con una funzione Twig, che può accedere ad altre logiche dell'applicazione, non solo ai dati passati nei modelli) che possono rendere un particolare componente assegnato ad oggetti appropriati. Quindi potresti avere una macro per il rendering, ad esempio, una lista della spesa che prende come parametro una lista della spesa e potresti quindi riutilizzare questa macro senza preoccuparti di aver passato i dati nel modello nello stesso modo altrove. Le variabili non passate esplicitamente nella macro non rientrano nell'ambito della stessa macro.

Una macro deve davvero eseguire un'attività specifica per acquisire alcuni dati e rendere un componente riutilizzabile. Una inclusione può comprendere qualsiasi pezzo di cose - è molto più importante per te. La natura estensibile del modo in cui i modelli di Twig funzionano, al contrario di qualcosa come Smarty, significa che è probabile che tu userai include meno, per design - ma ci possono comunque essere casi d'uso in cui sarà il modo più semplice per evitare la duplicazione nei tuoi modelli .

+6

La parte relativa a ** modello avrebbe accesso a qualsiasi variabile di modello attualmente in ambito ** non è completamente corretta. Si potrebbe fare: '{% include 'template.html.twig' con {'custom_var': custom_value} solo%}' che impedirebbe al modello incluso di accedere al contesto principale. Ciò renderebbe la funzionalità 'include' molto simile a' macro', con la differenza principale di come vengono dichiarati e invocati. – Karolis

2

Sono nuovo di Symfony2, ma penso che la differenza tra la macro di ramoscello e l'inclusione sia la seguente.

include: Utilizzato per definire parti comuni nella pagina, come intestazione, barra laterale o slot.

macro: utilizzato per definire le funzioni correlate alla vista, ad esempio l'impaginazione.