我有關於在實體中驗證值的OOP策略的問題。可以說我有這樣的實體:驗證實體中的值 - 通過setter或assert驗證?
/*
* @ORM\Table()
* @ORM\Entity(repositoryClass="My\PageBundle\Entity\PageRepository")
*/
class File {
/*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/*
* @ORM\Column(name="type", type="string")
*/
private $type;
/*
* @ORM\ManyToOne(targetEntity="File")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
private $parent;
}
現在我只想要實體類型「父母」可以是父母。我可以用兩種方法做到這一點。
使用Symfony Callback validation:
如果(!$這個 - >的getParent()= NULL & & $這個 - >的getParent() - >的getType()= '集團') $上下文> addViolationAt('parent','Invalid parent。',array(),null);
這是相當明顯的,但只能像它在Symfony book
之擬議當我打電話驗證,或
例如:
- 把這個邏輯在二傳手應檢查產生的實體和根據您自己的需要調整獲取/設置邏輯
setParent(File $parent) {
if ($parent->getType() != 'group')
throw new \Exception('Invalid parent');
$this->parent = $parent;
}
哪種方法比較好?使用專門爲此目的創建的驗證約束條件還是獲取者和設置者? 如果使用驗證 - 我應該總是使用默認的getter和setters,還是他們可以在裏面做任何奇特(而且有用)的東西(任何例子)?