Symfony2对整个实体的验证

jho*_*orn 4 validation entities symfony

我需要能够在Symfony2中对整个实体进行复杂的自定义验证.

例如:我entity有很多subentities,所有subentities必须达到100.

据我所知,Symfony2验证器只验证奇异字段?

jho*_*orn 6

答案是肯定的.您需要为对象而不是参数指定约束,并指定其类级别约束的约束.一个有点冗长的例子是:

config.yml

validator.my.uniquename:
  class: FQCN\To\My\ConstraintValidator
  arguments: [@service_container]
  tags:
    - { name: validator.constraint_validator, alias: ConstraintValidator }
Run Code Online (Sandbox Code Playgroud)

validation.yml

FQCN\To\My\Entity:
  constraints:
    - FQCN\To\MyConstraint: ~
Run Code Online (Sandbox Code Playgroud)

(本例中没有约束参数)

我的约束

namespace FQCN\To;

use 
  Symfony\Component\Validator\Constraint
  ;

/**
 * @Annotation
 */
class MyConstraint extends Constraint
{
  public $message = 'Constraint not valid';

  public function validatedBy()
  {
    return 'ConstraintValidator';
  }

  public function getTargets() 
  {
    # This is the important bit.
    return self::CLASS_CONSTRAINT;
  }
}
Run Code Online (Sandbox Code Playgroud)

我的ConstraintValidator

class MyConstraintValidator extends ConstraintValidator
{
  protected $container;

  function __construct($container)
  {
    $this -> container = $container;
  }

  function isValid($object, Constraint $constraint)
  {
    # validation here.
    return true;
  }
}
Run Code Online (Sandbox Code Playgroud)