AJAX表单提交(带文件)至Symfony,但$form->;isValid返回false
我使用一些Angular JS代码向Symfony控制器提交一个文件和一些其他字段(以及一个CSRF令牌)AJAX表单提交(带文件)至Symfony,但$form->;isValid返回false,ajax,angularjs,forms,symfony,Ajax,Angularjs,Forms,Symfony,我使用一些Angular JS代码向Symfony控制器提交一个文件和一些其他字段(以及一个CSRF令牌) var formObject = new FormData; formObject.append('email', self.careers[index].application.email); formObject.append('motivation', self.careers[index].application.motivation); formObject.appe
var formObject = new FormData;
formObject.append('email', self.careers[index].application.email);
formObject.append('motivation', self.careers[index].application.motivation);
formObject.append('resume', self.careers[index].application.file);
formObject.append('jobID', self.careers[index].id);
formObject.append('_token', self.CSRF);
$http.post('/app_dev.php/jobs/apply', formObject, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
}).success(function(){
self.careers[index].application = {};
}).error(function(){
// TODO: Explode on error
});
一切都很好,直到信息传到我的控制器,那里的一切似乎都爆炸了
public function applyAction(Request $request) {
$jobApplication = new JobApplications();
if (!$jobApplication) {
throw $this->createNotFoundException('Unable to find JobApplications entity.');
}
$form = $this->createFormBuilder($jobApplication)
->add('jobId')
->add('email')
->add('coverLetter')
->add('file')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$jobApplication->upload();
$em->persist($jobApplication);
$em->flush();
}
$response = 'some success message';
return new JsonResponse($response);
}
六个小时调试Symfony和JS,在浩瀚的互联网上搜索答案,然后用头撞桌子,后来我发现:
包含我发布的所有变量$request
$form->isValid()=FALSE
$form->isSubmitted()=FALSE
- 如果我从
至$form->handleRequest($request)
,$form->submit($request)
但$form->isSubmitted()=TRUE
$form->isValid()=FALSE
- 如果我删除验证,Symfony会抛出一个巨大的错误,指出
的所有属性都为null$jobApplication
var_dump($form->getData())
返回所有我的表单字段元素都是null
,即使在$form->handleRequest($request)
方法createFormBuilder使用默认名称“form”创建表单之后也是如此
所以
查找数据
表格[电子邮件]、表格[工号]等
试用
$form->submit($request->request->all())
反而
$form->handleRequest($request)
更新
似乎angular.js以JSON格式发布数据。所以首先需要从请求中获取原始数据,然后在提交之前对其进行解码这似乎就是$form->handleRequest失败的原因。最后,我不得不快速找到解决方案,因此我开始对表单进行预渲染,并通过正常的帖子提交表单。在Symfony3中使用正常的表单提交(PUT)处理此问题。听起来像个虫子。通过适当的方法到达路线。为什么提交的是假的?
$form->submit($request->request->all())
$form->handleRequest($request)