2012-02-21 5 views
2

У меня есть шаблон Twig Base, в котором есть строка поиска в верхней части страницы в блоке Twig. У меня есть еще один блок позже с именем «content», который заполняет мои детские страницы. В настоящее время мой базовый шаблон выглядит следующим образом:Оформление формы в шаблоне Twig с помощью 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