2012-02-21 81 views
2

我有一個基本的枝條模板,它在枝條塊的頁面頂部有一個搜索欄窗體。後來我有另一個塊命名爲「內容」,我的子頁面填寫完畢。目前,我的基本模板是這樣的:使用Symfony2在枝條模板中渲染表單

{% 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變量,並且每次我想渲染一個子視圖時都會傳遞它。我正在使用Twig和Symfony2。

謝謝!

回答

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 2012-02-21 23:13:11