为什么来自自定义验证的错误限制没有附加到表单的特定字段?

时间:2012-01-22 12:35:55

标签: symfony

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

ExtraPattern类有一个自定义约束(我使用注释应用它)。

对于表单处理,我使用extraPatterns集合字段创建了一个ArticelPatternType类。

现在,当我验证此表单并且ArticelPattern :: $ extraPatterns集合的其中一个元素引发了约束违规时,错误未分配给该元素,而是分配给整个表单,所以我无法在导致此错误的相应表单字段旁边显示此错误。

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

/**
 * @AssertApl
 */
class ExtraPattern 

我也尝试将它放在集合属性上,如下所示:

/**
 * @Assert\All(@AssertApl)
 */
private $extraPatterns;

但结果相同。由此集合的元素引起的@AssertApl约束错误不会分配给它们,而是分配给整个表单。

我知道如何让它发挥作用?

2 个答案:

答案 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或者您将获得附加到表单的错误,而不是字段。