Symfony 为什么自定义验证中的错误未通过表单附加到特定字段?

Symfony 为什么自定义验证中的错误未通过表单附加到特定字段?,symfony,Symfony,我有一个ArticelPattern类,它具有$extraPatterns属性。此属性是ExtraPattern类元素的数组 类ExtraPattern上有一个自定义约束,我使用注释应用该约束 对于表单处理,我创建了一个带有extraPatterns集合字段的ArticelPatternType类 现在,当我验证此表单时,ArticelPattern::$extraPatterns集合的一个元素引发了约束冲突,错误不会分配给该元素,而是分配给整个表单,因此我无法在导致此错误的相应表单字段旁边显示

我有一个ArticelPattern类,它具有$extraPatterns属性。此属性是ExtraPattern类元素的数组

类ExtraPattern上有一个自定义约束,我使用注释应用该约束

对于表单处理,我创建了一个带有extraPatterns集合字段的ArticelPatternType类

现在,当我验证此表单时,ArticelPattern::$extraPatterns集合的一个元素引发了约束冲突,错误不会分配给该元素,而是分配给整个表单,因此我无法在导致此错误的相应表单字段旁边显示此错误

而不是将自定义约束放在ExtraPattern类上,如下所示:

/**
 * @AssertApl
 */
class ExtraPattern 
/**
 * @Assert\All(@AssertApl)
 */
private $extraPatterns;
我还尝试将其放在collection属性上,如下所示:

/**
 * @AssertApl
 */
class ExtraPattern 
/**
 * @Assert\All(@AssertApl)
 */
private $extraPatterns;
但结果是一样的@此集合的元素导致的AssertApp约束错误不会分配给它们,而是分配给整个表单


知道如何使其工作吗?

您的类约束可能被映射到表单类型的表单,默认情况下启用了错误冒泡。将此选项设置为false应该满足您的要求

$builder ->add('extraPatterns', 'collection', array(
    // ...
    'options' => array('error_bubbling' => false),
));

您的类约束可能被映射到表单类型的表单,默认情况下启用了error\u冒泡。将此选项设置为false应该满足您的要求

$builder ->add('extraPatterns', 'collection', array(
    // ...
    'options' => array('error_bubbling' => false),
));

属于类似的问题:在实体和表单中使用firstName。不是你的名字


如果您的实体用户具有类似firstName的字段,则form builder接受带有下划线字段命名的form_字段。它可以正确地保存数据等等。但是,如果要在此字段中添加一些自定义约束,请注意下划线:不要使用它。使用指定的字段名,否则会将错误附加到表单,而不是字段

属于类似的问题:在实体和表单中使用firstName。不是你的名字


如果您的实体用户具有类似firstName的字段,则form builder接受带有下划线字段命名的form_字段。它可以正确地保存数据等等。但是,如果要在此字段中添加一些自定义约束,请注意下划线:不要使用它。使用指定的字段名,否则会将错误附加到表单,而不是字段

'error\u bubbling'=>false的工作原理与charm类似:但有点奇怪,当我通过@Assert\将@AssertApl约束直接放在集合元素类上而不是集合本身时,所有的错误仍然在冒泡。'error\u bubbling'=>false的工作原理与charm类似:但有点奇怪,当我通过@Assert\将@AssertApl约束直接放在集合元素类而不是集合本身上时,所有的错误仍然在冒泡。太棒了!这是关于它的官方讨论:太好了!这是关于它的正式讨论: