我正在尝试处理Symfony2中的表单,我在控制器中获取了它的所有值,但是当我调用时:
$form->isValid()
它返回false。我正在尝试在不同的Controller中处理表单。
表单分为两部分,首先是一些个人数据,然后是一些更多的信息,但是在表单的提交事件中,我加入了序列化表单的所有值。这是我在视图中呈现表单的方式:
<form id="myform" action="{{ path('_process_my_form') }}" {{ form_enctype(form) }} method="POST">
{{ form_errors(form) }}
{{ form_widget(form._token) }}
{{ form_widget(form.first_name, {'attr': {'class': 'form-control'}} ) }}
... // then I render the rest of the personal information widgets
<button type="submit" class="btn btn-info btn-block">Submit</button>
</form>
<form id="myform2">
{{ form_widget(form.job_name, {'attr': {'class': 'form-control'}} ) }}
... // then I render the rest of the widgets (not personal information)
</form>
然后,在Ajax请求中,我加入了两个这样的形式:
$("#my_form").submit(function(e) {
e.preventDefault();
$.ajax({
type: e.target.method,
url: e.target.action,
data: $("#my_form").serialize() + $("#my_form2").serialize(),
beforeSend: function( xhr ) {},
success: function(data) {
//do something...
}
});
});
我的_process_my_form规则如下所示:
_process_my_form:
pattern: /ajax/process-my-form
defaults: { _controller: MyBundle:User:processMyForm }
这是控制Ajax请求的Controller:
public function processMyFormAction(Request $request)
{
if ($request->isMethod('POST'))
{
$myEntity = new myEntity();
$form = $this->container->get('form.factory')->create(new myFormType(), $myEntity);
$form->bind($request);
if ($form->isValid())
{
//Process the form... this code is never excecuted :(
}
}
}
我做错了吗?
感谢!!!
答案 0 :(得分:0)
从Symfony 2.3开始,我相信他们改变了表单句柄
$form->bind($request);
到
$form->handleRequest($request);
但是我不确定前者是否仍然受到支持?据我所知,Form Interface
中不再存在绑定方法您可以在此处阅读更多内容Symfony Cookbook - Form Direct Submit