我正在尝试用教义来提高自己,并做最佳实践。我找到了一个很好的最佳实践介绍: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);
}
这是一个好的做法吗?如果不是,为什么?谢谢!