【问题标题】:Symfony2 Validation against entire entitySymfony2 针对整个实体的验证
【发布时间】:2012-03-12 23:47:01
【问题描述】:

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

例如:我的entity 有很多subentities,所有subentities 的总和必须为100。

据我所知,Symfony2 验证器只验证单个字段?

【问题讨论】:

    标签: validation symfony entities


    【解决方案1】:

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

    config.yml

    validator.my.uniquename:
      class: FQCN\To\My\ConstraintValidator
      arguments: [@service_container]
      tags:
        - { name: validator.constraint_validator, alias: ConstraintValidator }
    

    validation.yml

    FQCN\To\My\Entity:
      constraints:
        - FQCN\To\MyConstraint: ~
    

    (本例中的约束没有参数)

    我的约束

    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;
      }
    }
    

    我的约束验证器

    class MyConstraintValidator extends ConstraintValidator
    {
      protected $container;
    
      function __construct($container)
      {
        $this -> container = $container;
      }
    
      function isValid($object, Constraint $constraint)
      {
        # validation here.
        return true;
      }
    }
    

    【讨论】:

    • 有什么技巧可以解决The constraint MyBundle\Validator\Constraint cannot be put on properties or getters
    • @greg 对于未来的访问者,您必须将约束注释放在类声明之上。
    • 请在写答案时更精确。
    • @PAM,您如何建议更精确?这个例子对我来说似乎很精确。
    • 好吧,也许我没听懂。最后我用官方文档弄明白了。在您编辑帖子之前,我无法回复您 +1 :)
    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多