【问题标题】:Why errors from custom validation constrain not attached to specific field by to the form?为什么自定义验证约束的错误未附加到表单的特定字段?
【发布时间】:2012-01-22 12:35:55
【问题描述】:

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

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

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

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

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

/**
 * @AssertApl
 */
class ExtraPattern 

我也试过把它放在集合属性上,像这样:

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

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

知道如何让它工作吗?

【问题讨论】:

    标签: symfony


    【解决方案1】:

    您的类约束可能被映射到form 类型的形式,默认情况下启用error_bubbling。将此选项设置为 false 应该可以满足您的需求。

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

    【讨论】:

    • 'error_bubbling' => false 像魅力一样工作 :) 但是有点奇怪,当我将 @AssertApl 约束直接放在集合元素类上(而不是集合本身由 @Assert\所有)错误仍在冒泡。
    【解决方案2】:

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

    如果您的实体(用户)具有 firstName 之类的字段,则表单生成器接受 form_field(带下划线)字段命名。它正确保存数据等等。但是,如果您要向该字段添加一些自定义约束,请注意下划线:不要使用它。使用camelCaseFieldNames insted 否则您将收到附加到表单而不是字段的错误。

    【讨论】:

    猜你喜欢
    • 2014-04-24
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 2018-01-29
    • 1970-01-01
    相关资源
    最近更新 更多