【发布时间】:2016-07-21 00:16:04
【问题描述】:
我需要在同一页面上呈现 2 个表单。为此,我的控制器中有 2 个操作,第一个操作管理表单 1 并渲染整个页面,第二个操作管理表单 2 并仅渲染此表单。
第二个动作在 twig 中调用:
{% render (controller("AppBundle:User:secondForm")) %}
两者都被渲染,都可以工作,除非表单 2 的验证失败。控制器将用户返回到表单错误的表单,但不是返回整个页面,而是仅呈现表单。
我的代码如下所示:
第一个动作:
/**
* @Route("/profile/global-page", name="global_page")
*/
public function Global1Action(Request $request)
{
[.......]
$process = $formHandler->process($user);
if ($process) {
$request->getSession()->getFlashBag()->add('success', 'ok');
return $this->redirect($this->generateUrl('an_url'));
}
return $this->render('entire_page.html.twig', array(
'form' => $form->createView(),
));
}
然后是 Twig 全局 (entire_page.html.twig):
{% extends 'base.html.twig' %}
{% block content %}
{#FlashBags#}
{% include 'components/alert.html.twig' with {'type':'success'} %}
<div class="col-md-offset-3 col-md-6">
<div class="col-md-12 row">
<div class="panel panel-profil">
<div class="panel-heading">
<h3 class="panel-title">form 1</h3>
</div>
<div class="panel-body">
<form action="{{ path('global_page') }}" method="POST" class="form-horizontal text-center">
{{ form_widget(form) }}
<button type="submit" name="submit" class="btn btn-main button-sm">Go</button>
</form>
</div>
</div>
</div>
</div>
{% render (controller("AppBundle:User:secondForm")) %}
{% endblock %}
然后是 SecondForm 动作:
/**
* @Route("/profile/second-form", name="second_form")
*/
public function secondFormAction(Request $request)
{
[.......]
$process = $formHandler->process($user);
if ($process) {
$request->getSession()->getFlashBag()->add('success', 'ok');
return $this->redirect($this->generateUrl('an_url'));
}
return $this->render('only_form2.html.twig', array(
'form' => $form->createView(),
));
}
最后是第二根树枝(only_form2.html.twig):
<div class="col-md-offset-3 col-md-6">
<div class="col-md-12 row">
<div class="panel panel-profil" style="margin-top: 10px;">
<div class="panel-heading">
<h3 class="panel-title"> second form panel </h3>
</div>
<div class="panel-body">
<form action="{{ path('second_form') }}" {{ form_enctype(form) }} method="POST">
{{ form_widget(form) }}
<button type="submit" name="submit" class="btn btn-main button-sm">Go 2</button>
</form>
</div>
</div>
</div>
我不明白如何将用户返回到整个页面(有表单错误),而不是在验证失败时只呈现第二个表单。
谢谢!
编辑:我发现了这个post,它解释了如何在一个控制器中拥有 2 个表单。下面的答案似乎不适用于 Symfony 2.8
【问题讨论】: