symfony表单无效eqauls false但没有错误

时间:2017-02-22 16:16:48

标签: php forms symfony doctrine

我正在研究一个已经存在并使用原则的symfony项目。我在下面描述的问题是新的,我确定它是由我引起的,但我无法确认这一点,因为我不确定如何调试。

我有一个简单的表单(它提交了两个字段),我可以通过转储以下内容来看到这两个值都已正确提交:

$form->handleRequest($request);

问题是虽然我可以看到提交的值,但表单没有通过验证:

if ($form->isValid() === false)

这可能是通过验证,也许是4周前,所以我最近做过的事情。

我已经转储$form->getErrors(true);以查看是否可以找到错误,但它会返回:

RenderController.php on line 20:
FormErrorIterator {#685 ▼
 -form: Form {#691 ▶}
 -errors: []
}

所以除非我弄错了,否则在这里找不到任何错误,因为错误是空的。

我已经读过$form->isValid()检查数据模型,即底层实体对象。

我最近对一个实体进行了更改。我这样做是首先向数据库添加一个字段,然后进入实体类以手动更新它。

添加新字段时,我是否可能做错了?令我困惑的是,使用新领域的其他形式我没有遇到过任何问题。

我是否应该手动完成此操作?如何进一步调试表单?

1 个答案:

答案 0 :(得分:2)

这很可能是由symfony中的验证工作原因引起的。 正如您所写,$ form-> isValid()实际上并不验证表单本身。相反,底层实体已经过验证。

现在出现了棘手的部分:不仅验证了表单中存在的字段,还验证了实体的每个字段。如果您的表单仅代表您实体的一部分,则会出现所描述的效果。 可能添加的字段之一具有NotBlank断言(或类似),但在您的表单中不存在。对于新实体,这将始终失败。并且由于该字段不在表单中,因此表单中也没有错误。

要解决此问题,请扩展您的表单,从新字段中删除断言或查看validation groups