当isValid()返回false时,Symfony 2.6.3 {{form_errors(form)}}为空

时间:2015-01-25 21:25:10

标签: forms symfony

我正在使用Symfony V2.6.3

我有一个基于Type类的三个字段的简单表单。

Type类通过setDefaultOptions()指定的Entity类具有use Symfony\Component\Validator\Constraints as Assert;语句。

每个字段在Entity类中都有@Assert\NotBlank()约束。

启用CSRF。

禁用HTML5验证。

如果我提交所有字段为空白的表单,则会发生以下情况:

  • 在控制器中:
    • isValid()返回false
    • getErrors( true )会为每个字段返回错误
  • 在模板中:
    • {{ form_errors( form ) }}不会为表单或任何字段生成任何文本。

我创建了一个自定义表单主题并修改了{% block form_errors %} 转储errors变量。转储显示errors属性是一个FormErrorIterator对象,有两个属性:form,我相信字段定义,errors是一个空数组。< / p>

奇怪的是,深入到form属性会显示errors属性,该属性是一个包含错误消息的FormError对象的数组。

这不是我第一次使用表单。它过去对我来说效果很好。这可能是2.6中的新错误吗?

我搜索了这个,我发现的所有情况都是getErrors()也没有返回任何内容。

提前致谢, 戴夫

2 个答案:

答案 0 :(得分:1)

表单错误绑定到FormType,而不是完整的Form。 RootType仅包含从子类型冒出的错误。子类型只包含其类型的错误和从子子类型中冒出的错误等。

执行{{ form_errors(form) }}只会呈现根表单的错误。假设form.name字段出错,您可以通过执行以下操作来解决此错误:{{ form_errors(form.name) }}

答案 1 :(得分:1)

好。我终于找到了这个问题的答案。

非常感谢Symfony论坛上的讨论。他遇到了同样的问题并且想出了问题(http://forum.symfony-project.org/viewtopic.php?f=23&t=42841&p=135003&hilit=form_errors#p135003)。

事实证明,在调用isValid()之后你必须调用createView()。当你想到它时,这实际上是有道理的。