2012-03-03 72 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