17

TWIG マクロでテンプレート変数にアクセスできません。

簡単な例を次に示します。

{% set myname = "Ligio" %}
{{ _self.pagedurl(1) }}

{% macro pagedurl(page) %}
    Hi {{ _self.myname }}! This is Page Num {{ page }}
{% endmacro %}

変数mynameをマクロに渡さずにアクセスするにはどうすればよいですか?

4

3 に答える 3

21

それはいけません。

ドキュメントに記載されているように:

PHP 関数として、マクロは現在のテンプレート変数にアクセスできません。

あなたの唯一の解決策は、パラメータをに渡すことmacroです:

{% import _self as flow %}
{{ flow.pagedurl(1, "Ligio") }}

{% macro pagedurl(page, myname) %}
    Hi {{ myname }}! This is Page Num {{ page }}
{% endmacro %}

重要な注意点:

私の例で気づいたかもしれませんが、 I call {% import _self as flow %}.
これはあなたがしなければならないことです:

マクロを使用するテンプレートでマクロを定義する場合、インポートする代わりに _self.input() を介してマクロを直接呼び出したくなるかもしれません。動作しているように見えても、これは現在の実装の単なる副作用であり、Twig 2.x では動作しません。

http://twig.sensiolabs.org/doc/tags/macro.html

于 2013-03-02T17:23:57.810 に答える
12

複数のグローバル変数をマクロに渡す必要がある場合は、_context変数が役立つ場合があります。

{% macro mymacro(globalvars) %}
    Value of the global variable pi is {{ globalvars.pi }}
{% endmacro %}

{% set pi = 3.14159 %}
{{ _self.mymacro(_context) }}

参照:これまたはこの回答。

于 2014-12-24T13:25:52.240 に答える