2013-08-23 69 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