Symfony:选中复选框时验证字段

Symfony:选中复选框时验证字段,symfony,Symfony,我想使用@Assert\NotBlank和@Assert\email验证电子邮件实体,仅当选中复选框($updateEmailCheckBox)时。 因为现在这些断言是在电子邮件字段的注释中定义的,并且当复选框未选中时也会进行验证 以下是我的用户enity的片段: /** * Update email checkbox entity */ private $updateEmailCheckBox; /** * @var string * @Assert\NotBlank(mess

我想使用@Assert\NotBlank和@Assert\email验证电子邮件实体,仅当选中复选框($updateEmailCheckBox)时。 因为现在这些断言是在电子邮件字段的注释中定义的,并且当复选框未选中时也会进行验证

以下是我的用户enity的片段:

 /**
 * Update email checkbox entity
 */
 private $updateEmailCheckBox;

 /**
 * @var string
 * @Assert\NotBlank(message="Email can't be empty")
 * @Assert\Email(message="Wrong email pattern")
 */
private $email;

/**
 * @Assert\Callback
 */
public function validate(ExecutionContextInterface $context)
{
    /**
     * If update email checkbox is checked
     */
    if ($this->getUpdateEmailCheckBox() == 1)
    {
        // how to validate here an email field for Assert\NotBlank and Assert\Email ?
    }
}
我可以使用callback检查复选框是否被选中,但我不知道如何启用NotBlank和电子邮件验证,并且在违反约束的情况下返回相应的错误。

您可以使用

当您想在控制器或服务中验证您的用户时,可以重新验证该组(如果选中复选框)

默认值: 包含当前类和不属于其他组的所有引用类中的约束

如果您使用的是表单,那么您应该将表单配置为也使用验证组。大概是这样的:

public function configureOptions(OptionsResolver $resolver)
{
   $resolver->setDefaults(array(
       'validation_groups' => function (FormInterface $form) {
           $data = $form->getData();


           if (/* checkbox is checked */) {
               return array('Default', 'updateEmail');
           }

           return array('Default');
    },
   ));
}

非常感谢。似乎我的方法是完全错误的:)
$errors = $validator->validate($user, null, array('Default', 'updateEmail'));
public function configureOptions(OptionsResolver $resolver)
{
   $resolver->setDefaults(array(
       'validation_groups' => function (FormInterface $form) {
           $data = $form->getData();


           if (/* checkbox is checked */) {
               return array('Default', 'updateEmail');
           }

           return array('Default');
    },
   ));
}