【问题标题】:Rendering a Form in a Twig Template with Symfony2使用 Symfony2 在 Twig 模板中渲染表单
【发布时间】:2012-02-21 20:14:57
【问题描述】:

我有一个基本的 Twig 模板,它在 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变量并在每次我想要呈现子视图时传递它?我将 Twig 与 Symfony2 结合使用。

谢谢!

【问题讨论】:

    标签: forms templates view symfony twig


    【解决方案1】:

    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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      相关资源
      最近更新 更多