我試圖通過學說提高自己,並採取最佳做法。 我發現了一個很好的最佳實踐:https://ocramius.github.io/doctrine-best-practices/#/50構造的學說實體驗證
我嘗試在__construct之後擁有一個有效的對象。 (請參閱https://ocramius.github.io/doctrine-best-practices/#/52) 但我使用@Assert註釋驗證我的對象。
我該如何做驗證?必須在__construct對象內注入驗證器服務?
我的目標:
class Person
{
/**
* @var int
*
* @ORM\Column(name="id", type="guid")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
* @expose
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="name", type="string")
* @Assert\Email()
*/
private $email;
public function __construct($email, ValidatorInterface $validator){
$this->email = $email;
$validator->validate($this); // good practice ?
}
我的最終目標是單元測試這個實體的輸入驗證。
謝謝
編輯:
上Yonel的答案立足,我在構造函數的末尾添加這樣的:
$errors = $validator->validate($this);
if(count($errors) > 0) {
$errorsString = (string) $errors;
throw new InvalidArgumentException($errorsString);
}
這是一個好的做法或不?如果不是,爲什麼? 謝謝!
檢查更好的演示:命名的構造函數接受一個窗體對象這意味着形式做他的工作(與驗證驗證)。 – Matteo
好的答案,我現在看到了,謝謝! – Xero
謝謝Xero,讓我知道如果你想要一個真正的答案來標記問題已解決 – Matteo