Визуализация формы в шаблоне Twig с помощью Symfony2 - PullRequest
2 голосов
/ 22 февраля 2012

У меня есть базовый шаблон Twig с формой панели поиска в верхней части страницы в блоке Twig.У меня есть еще один блок с именем "content", который заполняют мои дочерние страницы.В настоящее время мой базовый шаблон выглядит следующим образом:

{% 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.

Спасибо!

1 Ответ

11 голосов
/ 22 февраля 2012

Встроенный контроллер - это то, что вам нужно. Поместите блок 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 %}
...