2013-08-23 116 views
4

我有一个验证器的实体(不是表格)。Symfony2:递归验证

所以我使用$validator->validate($entity),但它不验证我的子项(实体类有一些其他实体类与一些验证器)。

是否有“自动”的方式来做到这一点,或者我必须为他们每个人做$errorList->addAll($validator->validate($entity));

+1

您可以使用注释['@assert \有效'](http://symfony.com/fr/doc/current/reference/constraints/Valid.html) – Touki

+0

就是这样,谢谢! 我以为'@Assert \ Type(...)'就足够了...... – Bonswouar

回答

5

允许通过对象递归验证,你可以简单地使用约束@Assert\Valid


说一个人有一个强制性的姓氏

class Person 
{ 
    /** 
    * @Assert\NotNull 
    * @var string 
    */ 
    protected $lastName; 
} 

而且你有一个产品,它有一个买家( Person

class Product 
{ 
    /** 
    * @Assert\NotNull 
    * @Assert\Valid 
    * @var Person 
    */ 
    protected $buyer; 
} 

通过具有NotNullValid,每次验证Product模型,可以将检查:

  • 它有一个买家
  • 买方有lastName
+0

我会添加'@Assert \ Type(... \ Person)'以确保它是一个Person对象。 :) – Bonswouar

+4

@Bonswouar其实,你不必。由于属性被锁定,你应该有一个'setBuyer(Person $ person)'方法。如果给定类型错误,PHP将触发错误 – Touki