web-dev-qa-db-ja.com

Symfony2-twig)の動的変数名にアクセスする方法

twig likeにいくつかの変数があります

placeholder1
placeholder2
placeholderx

それらを呼び出すために、私はオブジェクトの配列「請求書」をループしています

{% for invoices as invoice %}
    need to display here the placeholder followed by the invoice id number
    {{ placeholedr1 }}

何か案が?ありがとうございました。

13
Miloš

私はちょうど同じ問題を抱えていました-そしてこの最初の答えを使用して、いくつかの追加の調査の後、{{ attribute(_context, 'placeholder'~invoice.id) }}が機能するはずであることがわかりました(_context名前ですべてのオブジェクトを含むグローバルコンテキストオブジェクトである)

25
Mathieu Jamot

attribute関数 を使用する代わりに、通常の角かっこ表記を使用して_context配列の値にアクセスすることもできます。

{{ _context['placeholder' ~ id] }}

私はこれを個人的に使用します。これは、より簡潔で、私の意見ではより明確だからです。

環境オプションstrict_variablestrueに設定されている場合は、defaultフィルターも使用する必要があります。

{{ _context['placeholder' ~ id]|default }}

{{ attribute(_context, 'placeholder' ~ id)|default }}

そうしないと、変数が存在しない場合にTwig_Error_Runtime例外が発生します。たとえば、変数foobarがあり、変数baz(存在しない)を出力しようとすると、メッセージKey "baz" for array with keys "foo, bar" does not existでその例外が発生します。

変数の存在を確認するためのより詳細な方法は、 defined test を使用することです。

{% if _context['placeholder' ~ id] is defined %} ... {% endif %}

defaultフィルタを使用して、デフォルト値を指定することもできます。 nullまたは文字列:

{{ _context['placeholder' ~ id]|default(null) }}

{{ attribute(_context, 'placeholder' ~ id)|default('Default value') }}

デフォルト値を省略した場合(つまり、|default(somevalue)の代わりに|defaultを使用した場合)、デフォルト値は空の文字列になります。

strict_variablesはデフォルトでfalseですが、たとえば次のような偶発的な問題を回避するために、trueに設定することをお勧めします。タイプミス。

12
mts knn

Twig attribute関数を使用できると思います。

http://twig.sensiolabs.org/doc/functions/attribute.html

4
Einenlum

この問題に対する私の解決策:

Placeholder(x)の配列を作成します。お気に入り:

# Options
$placeholders = array(
    'placeholder1' => 'A',
    'placeholder2' => 'B',
    'placeholder3' => 'C',
);

# Send to View ID invoice
$id_placeholder = 2;

ビューとテンプレート呼び出しの両方の変数を送信します。

{{ placeholders["placeholder" ~ id_placeholder ] }}

このプリント「B」。

これがお役に立てば幸いです。

3
Bruno Rigolon

私は解決策を見つけました:

attribute(_context, 'placeholder'~invoice.id)
0
user1409904