Validation 如果多个字段为空,则Symfony2 form builder不带类检查

Validation 如果多个字段为空,则Symfony2 form builder不带类检查,validation,symfony,constraints,formbuilder,Validation,Symfony,Constraints,Formbuilder,我使用的form builder没有类,有两个字段,每个字段都有约束: $form = $this->createFormBuilder() ->add('name', 'text', array( 'required'=>false, 'constraints'=> new Length(array('min'=>3) )) ->add('dob', 'date'

我使用的form builder没有类,有两个字段,每个字段都有约束:

$form = $this->createFormBuilder()
        ->add('name', 'text', array(
            'required'=>false,
            'constraints'=> new Length(array('min'=>3)
        ))
        ->add('dob', 'date', array(
            'required'=>false,
            'constraints'=> new Date()
        ))
        ->getForm()
        ->handleRequest($request);

这很好,但我想检查这两个字段是否都是emtpy,并显示错误。只是似乎无法处理这件事。有人能提供帮助吗

最简单的解决方案是根据需要设置这两个选项

但是。。在邮寄时,你可以简单地

if( empty($form->get('name')->getData()) && empty($form->get('dob')->getData())){
   $form->addError(new FormError("fill out both yo"));
   // ... return your view
}else {

  // ... do your persisting stuff
}
... 
symfony的方法可能是添加一个自定义验证器 我建议你特别看看这个

伪:

namespace My\Bundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class CheckBothValidator extends ConstraintValidator
{
    public function validate($foo, Constraint $constraint)
    {
            if (!($foo->getName() && $foo->getDob()) {
                $this->context->addViolationAt('both', $constraint->message, array(), null);
            }
    }
}

最简单的解决方案是根据需要设置这两个参数

但是。。在邮寄时,你可以简单地

if( empty($form->get('name')->getData()) && empty($form->get('dob')->getData())){
   $form->addError(new FormError("fill out both yo"));
   // ... return your view
}else {

  // ... do your persisting stuff
}
... 
symfony的方法可能是添加一个自定义验证器 我建议你特别看看这个

伪:

namespace My\Bundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class CheckBothValidator extends ConstraintValidator
{
    public function validate($foo, Constraint $constraint)
    {
            if (!($foo->getName() && $foo->getDob()) {
                $this->context->addViolationAt('both', $constraint->message, array(), null);
            }
    }
}

Bundle->Resources->Config
文件夹中创建文件名
validation.yml
然后

当您检查提交的表单数据是否有效时,验证将立即生效。


Bundle->Resources->Config
文件夹中创建文件名
validation.yml
然后

当您检查提交的表单数据是否有效时,验证将立即生效。


do'required'=>true在两个表单字段中。do'required'=>true在两个表单字段中。实际上,我想要的是'required'=>false。如果两个字段都为空,则只需要捕获。非常感谢。它起作用了。我想知道,我是否可以使用验证组或回调来处理这个问题?只是想多学一点…实际上“必需”=>false是我想要的。如果两个字段都为空,则只需要捕获。非常感谢。它起作用了。我想知道,我是否可以使用验证组或回调来处理这个问题?只是想多学点…谢谢。我没有在这上面使用实体。我确实希望在一个字段上允许空白,但在两个字段上都不允许空白。我想知道我是否可以添加到createFromBuilder构造中,以检查两者是否都为空。谢谢。我没有在这上面使用实体。我确实希望在一个字段上允许空白,但在两个字段上都不允许空白。我想知道是否可以添加到createFromBuilder构造中,以检查两者是否都为空。