Symfony表单验证:UniqueEntity - 多个字段 - 包括一个可空字段

时间:2017-03-29 06:10:31

标签: php symfony validation

情况:我有一个基于实体的表单。这个实体有两个属性 country staticRank ,这两个属性的元组都应该是唯一的...... 但是 staticRank 可能不是必需的,因此,它可以为null。我尝试使用 UniqueEntity 注释解决该问题:

@UniqueEntity(fields={"country", "staticRank"})

这并不像预期的那样工作,因为如果 staticRank null ,根据我的定义它应该是一个有效的组合。但是,有几个元组使用相同的 country null (对于 staticRank ),因此约束会指出违规。

实际问题:如果没有继承" UniqueEntityValidator"有没有办法实现此行为?

编辑:据我所知,约束的 ignoreNull - 属性只允许两个值为空(或者如果约束只设置为单个字段)

1 个答案:

答案 0 :(得分:1)

通过将服务传递到我的Type(继承自" AbstractType")并添加约束选项来解决该问题:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setRequired('myService');
    $resolver->setDefaults([
        // ...
        'constraints' => [
            new Callback([
                'callback' => [$this, 'checkCountryRankUniqueness']
            ])
        ]
    ]);
}

在该约束方法中,我检查了 staticRank 是否为空。如果它不为null,它将遍历所有对象并检查该组合是否是唯一的。

相关问题