Php Symfony中的表单无效,没有错误
这是我第一次尝试在Symfony中使用表单,我完全陷入了困境。我相信事情会很简单 我设置了一个简单的控制器(使用Symfony 2.7和FOSRestBundle 2.0): 但我的表单始终无效,即使没有错误:Php Symfony中的表单无效,没有错误,php,forms,symfony,fosrestbundle,Php,Forms,Symfony,Fosrestbundle,这是我第一次尝试在Symfony中使用表单,我完全陷入了困境。我相信事情会很简单 我设置了一个简单的控制器(使用Symfony 2.7和FOSRestBundle 2.0): 但我的表单始终无效,即使没有错误: curl -X POST --data 'id=foo&description=bar' http://localhost:8080/bracket/predictions Array ( [id] => foo [description] => ba
curl -X POST --data 'id=foo&description=bar' http://localhost:8080/bracket/predictions
Array
(
[id] => foo
[description] => bar
)
Array
(
[id] => 1
[description] => 2
)
false
因此,看起来我的请求数据没有进入表单,并且由于某种原因表单无效,即使没有打印任何错误
编辑:经过大量的讨价还价之后,似乎handleRequest()
调用已经确定表单尚未提交,因此未经验证-这意味着我进入了上述情况
因此,我可以用submit()
代替handleRequest()
,作为解决方法。这被文档描述为不推荐的行为:
因此,我显然仍在做一些错误的事情,但我无法从Symfony文档中看出这是什么。默认情况下,Symfony会自动为您嵌入并验证CSRF令牌,因此错误可能是因为您的令牌未提供 更多信息请访问:
我已经确定了问题所在 当像我一样发布数据时,默认情况下Symfony希望它封装在表单的名称中。例如,对于JSON:
{
"form": {
"id": "12",
"name": "abc"
}
}
现在,对于我不想要的RESTful API(我也不怀疑大多数人想要或期望的行为),您可以在代码中执行以下操作:
/**
* @View()
*/
public function postPredictionsAction(Request $request)
{
$form = $this->createFormBuilder(['id' => '1', 'description' => '2'])
->add('id', 'text')
->add('description', 'text')
->getForm();
// NOTE: we use submit here, but pass the data as an array, thus
// making it Symfony 3 compatible
$form->submit($request->request->all());
if ($form->isValid()) {
// Do valid work
}
// Output validation errors
return $form;
}
这在使用以下JSON时效果很好:
{
"id": "12",
"name": "abc"
}
希望这有助于其他人避免兔子洞我去发现这一艰难的方式 谢谢,我应该提到我已经在整个系统范围内禁用了CSRF-而且如果问题出在
getErrors()
调用中,我还希望看到CSRF错误。
{
"id": "12",
"name": "abc"
}