我有一个ArticelPattern类,它有$ extraPatterns属性。此属性是ExtraPattern(类)元素的数组。
ExtraPattern类有一个自定义约束(我使用注释应用它)。
对于表单处理,我使用extraPatterns集合字段创建了一个ArticelPatternType类。
现在,当我验证此表单并且ArticelPattern :: $ extraPatterns集合的其中一个元素引发了约束违规时,错误未分配给该元素,而是分配给整个表单,所以我无法在导致此错误的相应表单字段旁边显示此错误。
而不是将我的自定义约束放在ExtraPattern类上,如下所示:
/**
* @AssertApl
*/
class ExtraPattern
我也尝试将它放在集合属性上,如下所示:
/**
* @Assert\All(@AssertApl)
*/
private $extraPatterns;
但结果相同。由此集合的元素引起的@AssertApl约束错误不会分配给它们,而是分配给整个表单。
我知道如何让它发挥作用?
答案 0 :(得分:5)
您的类约束可能会映射到form
类型的形式,默认情况下启用error_bubbling
。将此选项设置为false
应该可以满足您的需求。
$builder ->add('extraPatterns', 'collection', array(
// ...
'options' => array('error_bubbling' => false),
));
答案 1 :(得分:1)
属于类似问题:在您的实体和表单中使用firstName
。不是first_name
。
如果您的实体(用户)具有firstName
字段,则表单构建器接受form_field
(带下划线)字段命名。它可以正确保存数据等。但是如果你要为这个字段添加一些自定义约束,请注意下划线:不要使用它。使用camelCaseFieldNames
insted或者您将获得附加到表单的错误,而不是字段。