我试图通过学说提高自己,并采取最佳做法。 我发现了一个很好的最佳实践: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