Php 条令/符号-强制有效实体状态
我正在用教义创建我的第一个更大的项目,到现在为止,我又爱又恨 我不明白的是: 为什么实体处于无效状态完全可以Php 条令/符号-强制有效实体状态,php,symfony,validation,doctrine-orm,Php,Symfony,Validation,Doctrine Orm,我正在用教义创建我的第一个更大的项目,到现在为止,我又爱又恨 我不明白的是: 为什么实体处于无效状态完全可以 class Author { /** * @Assert\NotBlank */ public $name; } 我的意思是,当然,您可以使用验证器来检查实体是否有效(例如,在持久化之前),但是如果它甚至不可能处于无效状态,这不是更好吗 class Author { /** * @Assert\NotBlank */
class Author
{
/**
* @Assert\NotBlank
*/
public $name;
}
我的意思是,当然,您可以使用验证器来检查实体是否有效(例如,在持久化之前),但是如果它甚至不可能处于无效状态,这不是更好吗
class Author
{
/**
* @Assert\NotBlank
*/
public $name;
}
IMHO不应执行以下操作:
$author = new Author();
因为这会导致实体无效。
是的,您可以这样做:
class Author
{
/**
* @Assert\NotBlank
* @var string
*/
public $name;
public function __construct( string $name )
{
$this->setName($name);
}
/**
* @param string $name
* @throws \Exception
*/
public function setName(string $name)
{
if($name ==''){
throw new \Exception('name must be set');
}
$this->name = $name;
}
}
但是,这个断言有什么好处,对吗
那么,我是错过了什么,还是就是这样?哦,上帝。我已经谈过了。太糟糕了 不过,我非常同意您的观点,如果您的输入数据在实体中不好,那么抛出异常并没有什么错 此外,对我来说,教义对这种用法没有限制。事实上,贫血模型在官方理论文件中有记录。所以是的,理论支持非贫血模型并不明显。但多亏了时代的变迁
我想“解决”你的问题,但我看不到任何问题。我希望我给出了您期望的结果。说清楚,这与表单验证有效状态无关?什么是有效状态?何时应检查此状态?在这种情况下,仅当名称不为空(@Assert\NotBlank)时实体才有效,否?何时检查实体更重要?每次实体更改?不,实际上是在更改之前,因为如果实体在更改后处于无效状态,则应拒绝“更改”。