如何控制 Symfony 的 RepeatedType 验证序列

问题描述

我使用 Symfony 的 RepeatedType 作为注册表单上的电子邮件地址。

$builder->add(
    'email',RepeatedType::class,[
        'invalid_message' => 'Confirm your email address',]
);

我还在属性声明本身添加约束:

/**
 * @var string|null
 *
 * @Assert\NotBlank
 * @Assert\Email(message="You must enter a valid email address")
 */
private ?string $email = null; 

问题是 Symfony 在运行特定于属性的验证之前运行 RepeatedType 验证。

换句话说,如果您输入了错误的电子邮件地址,它会首先确保您输入了两次错误的电子邮件地址,然后才告诉您这是错误的。

顺便说一下,这同样适用于我的密码 - 它会在告诉您密码强度要求未满足之前断言您重新输入正确。

我知道我可以控制 sequence of validation groups 但由于 RepeatedType 不适用于模型本身,我不确定如何实现这一点。

解决方法

如果您想自定义此行为,您可以检查电子邮件地址是否与非映射属性的约束相同:

use Symfony\Component\Validator\Constraints\EqualTo;

$builder->add('email',EmailType::class)
    ->add('email_repeat',EmailType::class,[
        'mapped' => false,'constraints' => [
            new EqualTo([
                'propertyPath' => 'email'
            ])
        ]
    ]);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...