2012-03-03 14 views
20

La macro button_primary può chiamare la macro button nel motore Twig? Ho provato questa soluzione, ma non funziona, si dice che il "pulsante" funzione non esiste:Chiamare una macro all'interno di un'altra macro in Twig

{% macro button(label, type, size) %} 
    {% set type = type|default('default') %} 
    {% set size = size|default('large') %} 
    {% set cls = ['btn'] %} 

    <a href="#" class="{{ cls|join(' ') }}">{{ label }}</a> 
{% endmacro %} 

{% macro button_primary(label, size) %} 
    {{ button(label, 'primary', size) }} 
{% endmacro %} 

risposta

48

risposta di Purtroppo Gremo funziona, ma non è il modo giusto per farlo.

Quando si definisce una macro nel modello in cui si intende utilizzarla, si potrebbe essere tentati di chiamare la macro direttamente tramite _self.input() anziché importarla; anche se sembra funzionare, questo è solo un effetto collaterale dell'attuale implementazione e non funzionerà più in Twig 2.x.

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

modo corretto:

{% macro input(name, value, type, size) %} 
    <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" /> 
{% endmacro %} 

{% macro wrapped_input(name, value, type, size) %} 
    {% import _self as forms %} 

    <div class="field"> 
     {{ forms.input(name, value, type, size) }} 
    </div> 
{% endmacro %} 
+1

Buon punto. Non ricordo questo avviso al momento della domanda. Grazie comunque... – gremo

3

risposta a me stesso: è piuttosto una nuova caratteristica aggiunta, vedi this link. In ogni caso la soluzione sta usando _self:

{% macro button_primary(label, size) %} 
    {{ _self.button(label, 'primary', size) }} 
{% endmacro %} 
+0

Si prega di vedere la mia risposta per il modo corretto per farlo. – WTPK