在与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 %}
那么......有可能做那件事吗?将表单放在一个继承的视图(从索引的过滤器视图)传递给它的控制器给出的表单变量???它应该工作?我错过了什么或做错了什么?谢谢
答案 0 :(得分:2)
那是因为Symfony2.1中的语法是:
{% include "ViciousAmateurBundle:Default:filters.html.twig" with { form: form} %}
答案 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>