【问题标题】:Symfony Form Validation: UniqueEntity - multiple fields - including one nullable fieldSymfony 表单验证:UniqueEntity - 多个字段 - 包括一个可为空的字段
【发布时间】:2017-03-29 06:10:31
【问题描述】:

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

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

这不像预期的那样工作,因为如果 staticRanknull 根据我的定义,它应该是一个有效的组合。但是,有几个元组具有相同的 countrynull(对于 staticRank),因此约束说明了违规。

实际问题:有没有办法在不继承“UniqueEntityValidator”的情况下归档这种行为?

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

【问题讨论】:

  • country 和 staticRank 实体是多对多关系还是只是实体的字段?
  • @Mawcel country 是 ManyToOne,staticRank 只是一个字段(都在同一个实体中使用)
  • @Mawcel 谢谢,这可以在 ORM 方面工作并且已经在我的代码中,但我正在寻找可以用来验证提交表单的东西。

标签: php symfony validation


【解决方案1】:

通过将服务传递给我的类型(继承自“AbstractType”)并添加约束选项来解决该问题:

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

在那个约束方法中,我检查了 staticRank 是否为空。如果不为null,则遍历所有对象,检查组合是否唯一。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2015-05-02
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多