5

symfony2コントローラーからTWIGテンプレートに配列を渡すことができません。私はコントローラーでこのコードを使用します:

$searchTerms['color'] = "Red";
return $this->render('TestBundle::search.html.twig', 
        array(
            "searchTerms" => $searchTerms));

小枝テンプレートでは、次のような変数にアクセスしようとしています。

  1. {{searchTerms['color']}}
  2. {{searchTerms.color}}

どちらも何も出力せず、空の文字列であるため、配列がテンプレートに来るように見えますが、その要素は空です。

何が悪いの?

4

2 に答える 2

9

はい、このコードは機能します。最初に確認することは、小枝のコードが正しいページにあることです(TestBundle::search.html.twig)。これはばかげているように聞こえるかもしれませんが、それは時々起こります...

これで問題がなければ、テンプレート内でデバッグすることをお勧めします。デバッグは最も重要なことです。プログラミング中、特に何か新しいことを試みるときは、常にこの種の問題が発生します。コードのデバッグが上手になればなるほど、最初からすべてを正しく行う方法がないため、プログラマーとして上手になります。

では、どのようにデバッグできますか?

twigテンプレート内でデバッグするには、twigのdebug拡張機能を使用できます。デバッグオプションをアクティブにするには、構成ファイルをすばやく変更する必要があります。紛失した場合は、このスレッドを読むこともできます。

テンプレート内の任意の変数を次のようにデバッグできます。

<pre>
{% debug searchTerms %}
</pre>

このようにして、変数を簡単にデバッグし、問題が何であるかをテストできます。

{% debug searchTerms['color'] %}

物事をすばやくデバッグしたい場合は、LadyBugBundleを使用することを強くお勧めします。それはあなたがそのようなことをすることを可能にする素晴らしいツールです:

コントローラ内:

ladybug_dump($searchTerms);

TWIGテンプレートの場合:

{{ searchTerms|ladybug_dump }}

従来のオプションとそれほど違いはありませんが、var_dump長い配列やオブジェクトがある場合は、ladybug印象に残ります。さらに重要なことに、コントローラーでは、デバッグステートメントの後にページが読み込まれないようにするために、特定の時点でコードを停止する必要があることがよくあります。これは、てんとう虫ではかなり簡単です。

ladybug_dump_die($searchTerms);

この簡単なステートメントを使用して、「デバッグ済み」変数をSymfonyプロファイラーにロードするようにてんとう虫に依頼することもできます。

$this->get('ladybug')->log($searchTerms);

これで、Symfony2プロファイラーのタブから変数に直接アクセスできるようになりました。 てんとう虫はもっとたくさんのことができますが、このために、ドキュメントは本当に良いです。

于 2012-09-11T01:44:18.893 に答える
3

次のようにテンプレートを変更する必要があると思います。

{% for item in searchTerms %}
    {{ item.color }}<br/>
{% endfor %}

公式ドキュメントを参照してください:テンプレートの作成と使用->埋め込みコントローラー

于 2012-10-22T11:09:20.350 に答える