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

3

は、回答:それはthis linkを参照してください、非常に新しい機能が追加されます。とにかく解決策は_selfを使用している:

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

それを行うための正しい方法についての私の答えを参照してください。 – WTPK

関連する問題