2012-03-03 25 views
20

¿Cómo macro button_primary puede llamar al macro button en el motor Twig? He intentado esta solución, pero no funciona, se dice que el "botón" función no existe:Llamar a una macro dentro de otra macro en 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 %} 

Respuesta

48

respuesta de Gremo Desafortunadamente, pero no es la forma correcta de hacerlo.

Cuando define una macro en la plantilla donde va a utilizarla, puede tener la tentación de llamar a la macro directamente a través de _self.input() en lugar de importarla; incluso si parece funcionar, esto es solo un efecto secundario de la implementación actual y ya no funcionará en Twig 2.x.

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

manera correcta:

{% 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

Buen punto. No puedo recordar ese aviso en el momento de la pregunta. Gracias de todos modos... – gremo

3

respuesta a mí mismo: es una nueva característica bastante al respecto, consulte this link. De todos modos la solución está utilizando _self: trabaja

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

favor ver mi respuesta es la forma correcta de hacerlo. – WTPK

Cuestiones relacionadas