我正在使用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()
也没有返回任何内容。
提前致谢, 戴夫
答案 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()。当你想到它时,这实际上是有道理的。