Php Symfony中的表单无效,没有错误

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

这是我第一次尝试在Symfony中使用表单,我完全陷入了困境。我相信事情会很简单

我设置了一个简单的控制器(使用Symfony 2.7和FOSRestBundle 2.0):

但我的表单始终无效,即使没有错误:

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"
}