3

我在注册表单上使用 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 验证。

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

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

我知道我可以控制验证组的顺序,但由于 RepeatedType 没有应用于模型本身,我不确定如何实现这一点。

4

1 回答 1

0

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

use Symfony\Component\Validator\Constraints\EqualTo;

$builder->add('email', EmailType::class)
    ->add('email_repeat', EmailType::class, [
        'mapped' => false,
        'constraints' => [
            new EqualTo([
                'propertyPath' => 'email'
            ])
        ]
    ]);
于 2021-02-21T00:00:30.407 回答