为什么自定义验证约束的错误不会附加到特定字段的表单?
我有一个ArticelPattern类,它有$ extraPatterns属性。该属性是ExtraPattern(类)元素的数组。为什么自定义验证约束的错误不会附加到特定字段的表单?
对ExtraPattern类(我使用注释应用)有一个自定义约束。
对于表单处理,我使用extraPatterns集合字段创建了一个ArticelPatternType类。
现在,当我验证此表单并且存在由ArticelPattern :: $ extraPatterns集合中的一个元素引发的约束违规时,错误未分配给该元素,而是分配给整个表单,所以我无法在导致此错误的相应表单字段旁显示此错误。
而不是把我的定制约束的ExtraPattern类,像这样:
/**
* @AssertApl
*/
class ExtraPattern
我也试图把它放在集合属性,像这样:
/**
* @Assert\All(@AssertApl)
*/
private $extraPatterns;
但同样的结果。由集合中的元素引起的@AssertApl约束错误不会分配给它们,而是分配给整个表单。
任何想法如何让它工作?
您的类约束可能被映射到form
类型的表单,其默认情况下启用了error_bubbling
。将此选项设置为false
应该做你想要的。
$builder ->add('extraPatterns', 'collection', array(
// ...
'options' => array('error_bubbling' => false),
));
属于类似的问题:在你的实体使用firstName
,形成。不是first_name
。
如果您的实体(用户)具有类似firstName
的字段,则表单构建器接受form_field
(带下划线)字段命名。它可以正确保存数据等等。但是,如果您要为此字段添加一些自定义约束,请谨慎使用下划线:请勿使用它。使用camelCaseFieldNames
insted,否则您会收到错误附加到窗体,而不是字段。
太棒了!在这里你是一个关于它的官方讨论:https://github.com/symfony/symfony/issues/9162 –
'error_bubbling'=>错误的作品像魅力:)但有点奇怪,当我把@AssertApl约束直接放在集合元素类(而不是集合本身@Assert \ All)时,错误是仍然冒泡。 – JohnM2