web-dev-qa-db-ja.com

Twig)の別のマクロ内でマクロを呼び出す

どうやって button_primaryマクロはTwigエンジンでbuttonマクロを呼び出すことができますか?私はこの解決策を試しましたが、機能しません、それは関数 "ボタン"は存在しません

{% 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 %}
32
gremo

残念ながら、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 %}
61
WTPK

自分自身への回答:これはまったく新しい機能が追加されました。 このリンク を参照してください。とにかく、解決策は_selfを使用しています。

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