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

관련 문제