2012-02-21 3 views
2

Twigブロックのページ上部に検索バーフォームを持つ基本Twigテンプレートがあります。私は後で私の子供のページが記入する名前 "内容"に別のブロックを持っています。現在、私の基本テンプレートは次のようになります。Symfony2を使ってTwigテンプレートのフォームをレンダリングする

{% block admin_bar %} 
    <div id="search"> 
     <form action="{{ path('search') }}" method="post" {{ form_enctype(search_form) }}> 
      {{ form_widget(search_form.term) }} 
      {{ form_widget(search_form.type) }} 
      {{ form_widget(search_form.pool) }} 
      {{ form_widget(search_form._token) }} 
      <input type="submit" value="Search" /> 
     </form> 
    </div> 
{% endblock %} 

{% block content %} 
{% endblock %} 

子テンプレートをレンダリングしようとしたときしかし、私はそれと一緒にsearch_form変数に渡す必要があります。とにかく(自分自身でHTMLタグを書き出すのに不足していますか)このsearch_form変数を作成せずに、子ビューをレンダリングするたびに渡す必要はありませんか?私はSymfony2と一緒にTwigを使用しています。

ありがとうございます!

答えて

11

Embedded Controllerが必要です。あなたのadmin_barブロックは別のファイルに入れてください:

{# src/Acme/AcmeBundle/Resources/views/Search/index.html.twig #} 
<div id="search"> 
    <form action="{{ path('search') }}" method="post" {{ form_enctype(search_form) }}> 
     {{ form_widget(search_form.term) }} 
     {{ form_widget(search_form.type) }} 
     {{ form_widget(search_form.pool) }} 
     {{ form_widget(search_form._token) }} 
     <input type="submit" value="Search" /> 
    </form> 
</div> 

は、このテンプレートのためのコントローラを作成します。その後、

class SearchController extends Controller 
{ 
    public function indexAction() 
    { 
     // build the search_form 

     return $this->render('AcmeAcmeBundle:Search:index.html.twig', array('search_form' => $searchForm)); 
    } 
} 

とは、元のテンプレートにコントローラを埋め込む:

{% block admin_bar %} 
    {% render "AcmeAcmeBundle:search:index" %} 
{% endblock %} 

{% block content %} 
{% endblock %} 
+0

おかげで、これはまさに私です欲しかった! – celestialorb

関連する問題