如何将表单视图放在继承的树枝视图中?

时间:2013-02-09 21:50:10

标签: symfony twig

在与ViciousAmateur相关的视图中:默认:索引控制器/动作我想添加一个表单来过滤分页结果(KnpPaginatorBundle)。在我的控制器中,我创建表单并使用表单变量返回视图。 (啊..如果我把表单直接放在视图中,它按预期工作)。

/**
 * @Route("/{page}", defaults={"page" = 1}, name="homepage")
 * @Route("/")
 * @Template()
 */
public function indexAction(Request $request, $page)
{
    $filters = new Filters();
    $form = $this->createForm(new FiltersType(), $filters);
    if ($request->isMethod('POST')) {
        $form->bind($request);

        if ($form->isValid()) {
            // Do something with form submited data
        }
    }

    // Do something when index action loads, pagination etc...

    return $this->render('ViciousAmateurBundle:Default:index.html.twig', array(
        'form' => $form->createView(),
        'pagination' => $pagination
        )
    );
}

但是,如果我尝试将表单放入一个包含(以使视图继承/分离)将表单变量传递给该视图...那么它不起作用。我收到此回复“错误101(net :: ERR_CONNECTION_RESET):Se ha restablecidolaconexión。”(有些单词是西班牙语)这是我的观点:

// file: ViciousAmateurBundle:Default:index.html.twig
{% extends '::base.html.twig' %}

{% block body %}
    {{ include('ViciousAmateurBundle:Default:filters.html.twig', {'form': form}) }}

    {% block filters %}
    {% endblock %}

    // Stuff in the body
{% endblock %}

如您所见,表单视图是从索引继承的(extends子句),并将代码添加到其“filters”twig块...

// file: ViciousAmateurBundle:Default:filters.html.twig
{% extends 'ViciousAmateurBundle:default:index.html.twig' %}

{% block filters %}
<section class="filters">
    <form action="{{ path('homepage') }}" method="post" {{ form_enctype(form) }} class="filters">
        {{ form_errors(form) }}

            {{ form_errors(form.country) }}
            {{ form_widget(form.country, { 'attr': { 'placeholder': 'País', 'class': 'input-block-level' } }) }}

            // Some more form fields...

        {{ form_rest(form) }}

        <input type="submit" class="filters_submit btn btn-large btn-block" />
    </form>
</section>
{% endblock %}

那么......有可能做那件事吗?将表单放在一个继承的视图(从索引的过滤器视图)传递给它的控制器给出的表单变量???它应该工作?我错过了什么或做错了什么?谢谢

2 个答案:

答案 0 :(得分:2)

那是因为Symfony2.1中的语法是:

{% include "ViciousAmateurBundle:Default:filters.html.twig" with { form: form} %}

Twig include function

答案 1 :(得分:1)

我所做的是将extends子句和twig块移到filters.html.twig视图中。并将其包含在过滤器twig块内的index.html.twig页面中。

index.html.twig

...
{% block filters %}
    {{ include('ViciousAmateurBundle:Default:filters.html.twig', {'form': form}) }}
{% endblock %}
...

filters.html.twig

<section id="filters">
<form action="{{ path('homepage') }}" method="post" {{ form_enctype(form) }} class="filters">
    {{ form_errors(form) }}

        {{ form_errors(form.country) }}
        {{ form_widget(form.country, { 'attr': { 'placeholder': 'País', 'class': 'input-block-level' } }) }}

        {{ form_errors(form.city) }}
        {{ form_widget(form.city, { 'attr': { 'placeholder': 'Ciudad', 'class': 'input-block-level' } }) }}

        {{ form_errors(form.gender) }}
        {{ form_widget(form.gender, { 'attr': { 'placeholder': 'Género', 'class': 'input-block-level' } }) }}

        {{ form_errors(form.sexual_orientation) }}
        {{ form_widget(form.sexual_orientation, { 'attr': { 'placeholder': 'Orientación sexual', 'class': 'input-block-level' } }) }}

    {{ form_rest(form) }}

    <input type="submit" id="toggleFilters1" class="filters_submit btn btn-large btn-block" value="Filtrar" />
</form>