2012-03-03 71 views
20

button_primary宏如何在Twig引擎中调用button宏?我已经试过这 的解决方案,但它不工作,它说,功能“按钮”不存在在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 %} 

回答

48

不幸的是Gremo的答复工作,但不这样做的正确方法。

当您要在要使用它的模板中定义一个宏时,可能会试图直接通过_self.input()调用宏而不是导入宏;即使似乎工作,这只是当前实现的一个副作用,它不会在Twig 2.x中起作用。

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

正确方法:

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

好点。在问题发生时我不记得那个通知。不管怎么说,多谢拉... – gremo 2012-11-29 09:29:49

3

回答对自己说:这是一个很新的功能加入,看到this link。但无论如何,解决方案是使用_self

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

请参阅我的答案正确的方法来做到这一点。 – WTPK 2012-11-29 09:23:48