我有一个不与任何实体绑定的注册表单。我想出了如何指定验证器(validation_constraint
选项)。如果我使用简单的验证器也没关系。
但是如果我想进行跨字段验证,比如比较“密码”和“重复密码”字段怎么办?
如果它是一个实体,那么它就像向自定义方法添加“@Assert/True”注释一样简单,但在这里我一无所知,在文档或网络中找不到任何东西。
我有一个不与任何实体绑定的注册表单。我想出了如何指定验证器(validation_constraint
选项)。如果我使用简单的验证器也没关系。
但是如果我想进行跨字段验证,比如比较“密码”和“重复密码”字段怎么办?
如果它是一个实体,那么它就像向自定义方法添加“@Assert/True”注释一样简单,但在这里我一无所知,在文档或网络中找不到任何东西。
在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'));
}
});