Twig 在细枝中的另一个宏中调用宏

Twig 在细枝中的另一个宏中调用宏,twig,Twig,如何在Twig引擎中调用按钮\u primary宏?我试过了 此解决方案,但不起作用,它表示功能“按钮”不存在: {%macro按钮(标签、类型、大小)%} {%set type=type | default('default')%} {%set size=size |默认值('large')%} {%set cls=['btn']%} {%endmacro%} {%macro按钮\主(标签,大小)%} {{按钮(标签“主”,大小)} {%endmacro%} 回答我自己:这是一个新增的功能,请

如何在Twig引擎中调用
按钮\u primary
宏?我试过了 此解决方案,但不起作用,它表示功能“按钮”不存在:

{%macro按钮(标签、类型、大小)%}
{%set type=type | default('default')%}
{%set size=size |默认值('large')%}
{%set cls=['btn']%}
{%endmacro%}
{%macro按钮\主(标签,大小)%}
{{按钮(标签“主”,大小)}
{%endmacro%}

回答我自己:这是一个新增的功能,请参阅。无论如何,解决方案是使用
\u self

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

不幸的是,格雷莫的答案是有效的,但不是正确的方法

在要使用宏的模板中定义宏时,您可能会试图通过_self.input()直接调用宏,而不是导入宏;即使看起来有效,这只是当前实现的一个副作用,在Twig2.x中不再有效

正确的方法:

{% 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 %}
{%宏输入(名称、值、类型、大小)%}
{%endmacro%}
{%macro-wrapped_输入(名称、值、类型、大小)%}
{%import\u self as forms%}
{{forms.input(名称、值、类型、大小)}
{%endmacro%}

Gremo的答案是在Twig3.x中实现这一点的正确方法

当宏的用法和定义在同一模板中时,您不需要 需要导入宏,因为它们在下自动可用 特殊的自变量


说得好。我记不起提问时的那个通知了。无论如何谢谢你。。。
{% 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 %}