1

我有一个不与任何实体绑定的注册表单。我想出了如何指定验证器(validation_constraint选项)。如果我使用简单的验证器也没关系。

但是如果我想进行跨字段验证,比如比较“密码”和“重复密码”字段怎么办?

如果它是一个实体,那么它就像向自定义方法添加“@Assert/True”注释一样简单,但在这里我一无所知,在文档或网络中找不到任何东西。

4

1 回答 1

1

buildForm表单的功能中,您可以使用CallbackValidator

 use Symfony\Component\Form as Form;

 //...

 public function buildForm(FormBuilder $builder, array $options)
 {
    // build your form...
    $builder->addValidator(new Form\CallbackValidator(function(Form\FormInterface $form)
    {
       if ($form["password"]->getData() != $form["repeat_password"]->getData())
       {
            $form->addError(new Form\FormError('passwords must be the same'));
       }
    });
    //...
 }

在 symfony 2.1+ 中,你应该为 POST_BIND 事件添加一个事件监听器:

$builder->addEventListener(FormEvents::POST_BIND, function(FormEvent $event)
{
    $form = $event->getForm();

    if($form['password']->getData() !== $form['password_confirm']->getData())
    {
        $form['password_confirm']->addError(new FormError('error.form.passwords-not-match'));
    }
});      
于 2012-06-19T12:32:35.383 回答