2013-02-27 13 views
8

Non riesco ad accedere alla variabile del modello nella macro TWIG.Come posso accedere alla variabile del template nella macro TWIG?

Ecco un esempio semplificato:

{% set myname = "Ligio" %} 
{{ _self.pagedurl(1) }} 

{% macro pagedurl(page) %} 
    Hi {{ _self.myname }}! This is Page Num {{ page }} 
{% endmacro %} 

Come posso accedere alla variabile mionome senza passare alla macro?

+0

Hai provato un semplice '{{myname}}'? – Maerlyn

+1

con {{myname}} Non sono nella portata della variabile ... Non funziona! – Ligio

risposta

16

Non è possibile.

Come indicato nella documentazione:

Come funzioni PHP, le macro non hanno accesso al modello corrente variabili.

l'unica soluzione è quella di passare il parametro al macro:

{% import _self as flow %} 
{{ flow.pagedurl(1, "Ligio") }} 

{% macro pagedurl(page, myname) %} 
    Hi {{ myname }}! This is Page Num {{ page }} 
{% endmacro %} 

NOTA IMPORTANTE:

Avrete notato nel mio esempio, io chiamo {% import _self as flow %}.
Questo è qualcosa che MUST fare:

Quando si definisce una macro nel modello dove si sta andando ad usarlo, si potrebbe essere tentati di chiamare la macro direttamente tramite _self.input() invece di importarlo; anche se sembra funzionare, questo è solo un effetto collaterale dell'implementazione corrente e non funzionerà più in Twig 2.x.

http://twig.sensiolabs.org/doc/tags/macro.html

+1

Una soluzione che può "hackerare" i tuoi "globals" è creare una ram var (o usare _context) come una matrice delle tue variabili importanti e quindi passare questo singolo twig var come ultimo argomento a qualsiasi macro che usi. --------- Quando nell'ambito della tua macro puoi accedere a questo argomento finale tramite la proprietà varargs. ad esempio: {% set MyGlobals = varargs [0]%} –

5

Se è necessario passare più di una variabile globale nella macro, si potrebbe trovare l'utile _context variabile:

{% macro mymacro(globalvars) %} 
    Value of the global variable pi is {{ globalvars.pi }} 
{% endmacro %} 

{% set pi = 3.14159 %} 
{{ _self.mymacro(_context) }} 

Rif: this o this risposta.

Problemi correlati