Php Symfony 4-集合字段的Uniquentity约束验证

Php Symfony 4-集合字段的Uniquentity约束验证,php,symfony,collections,constraints,unique,Php,Symfony,Collections,Constraints,Unique,Symfony有一个问题已经存在很长时间了,这使得我们无法对集合使用验证约束 例如,对于collectionType,如果我们同时添加两个标题相同的产品,那么将出现重复错误 这个话题也谈到了它: 今年似乎有了新的东西,但我不确定它是否真的符合我的要求: 显然,我的目标是,当我验证包含多个具有相同标题、相同电子邮件地址或其他内容的对象的集合时,会有一个约束来检查并警告我们,以便我们可以进行更改 因此,我尝试设置文档中显示的内容,但我没有成功,我不知道如何使其适应我的情况 我想在我的Collecti

Symfony有一个问题已经存在很长时间了,这使得我们无法对集合使用验证约束

例如,对于collectionType,如果我们同时添加两个标题相同的产品,那么将出现重复错误

这个话题也谈到了它:

今年似乎有了新的东西,但我不确定它是否真的符合我的要求:

显然,我的目标是,当我验证包含多个具有相同标题、相同电子邮件地址或其他内容的对象的集合时,会有一个约束来检查并警告我们,以便我们可以进行更改

因此,我尝试设置文档中显示的内容,但我没有成功,我不知道如何使其适应我的情况

我想在我的CollectionType上添加一个验证约束,以便它验证在子集合中输入的每个电子邮件都是唯一的。我想直接从我的表单类型开始

如下图所示,当我尝试提交一个包含两个具有相同电子邮件地址的对象的表单时:

在不尝试新的约束唯一性的情况下,我得到了以下结果:

SQLSTATE[23000]:完整性约束冲突:1062 du 冠军杯test@mail.fr“倒酒”UNIQ_8D93D649E7927C74

我尝试过类似的方法,但不起作用:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $entreprise = $options['entreprise'];

        $builder
        ->add('utilisateurs', CollectionType::class, [
            'entry_type' => RegistrationType::class,
            'entry_options' => [
                'label' => false,
                'entreprise' => $entreprise,
            ],
            'allow_add' => true,
            'allow_delete' => true,
            'delete_empty' => true,
            'by_reference' => true,
            'prototype' => true,
            'label' => false,
            'attr' => [
                'class' => 'my-selector',
                'label' => false,
            ],
            'by_reference' => false,
        ])
        ;

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => RegistrationCollection::class,
            'entreprise' => Entreprise::class,
            'constraints' => [
                new Collection([
                    new UniqueEntity([
                        "fields" => "email",
                        "message" => "Adresse email répétée"
                    ])
                ])
            ]
        ]);
    }
还有我的第二种类型:

RegistrationType.php:

$builder
            ->add('nom', TextType::class, [
                'attr' => [
                    'placeholder' => "Nom"
                ]
            ])
            ->add('prenom', TextType::class, [
                'attr' => [
                    'placeholder' => "Prénom"
                ]
            ])
            ->add('profession', TextType::class, [
                "required" => false,
                'attr' => [
                    'placeholder' => "Profession"
                ]
            ])
            ->add('email', EmailType::class, [
                'attr' => [
                    'placeholder' => "Adresse email"
                ]
                ])
    ;

回拨对我有什么帮助?理想情况下,我会从formTypeI中寻找一种设置约束的方法。我在这里发布了带有链接的答案,因为stackoverflow要求答案中包含完整的代码示例。如果这是解决方案,我也可以在这里发布完整的答案。