【问题标题】:Doctrine / Symfony - force valid entity stateDoctrine / Symfony - 强制有效的实体状态
【发布时间】:2018-12-20 09:55:29
【问题描述】:

我正在使用教义创建我的第一个更大的项目,到目前为止,我又爱又恨!

我不明白的是: 为什么实体处于无效状态完全可以?

我的意思是,当然,您可以使用验证器来检查实体是否有效(例如,在持久化之前),但如果它甚至不可能处于无效状态,那不是更好吗?

class Author
{
    /**
     * @Assert\NotBlank
     */
    public $name;
}

恕我直言,这应该是不可能的:

$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)时才有效,不是吗?
  • 什么以及更重要的何时会检查实体?每次实体改变?
  • 不,实际上是在更改之前,因为如果实体在更改后处于无效状态,则应拒绝“更改”。

标签: php symfony validation doctrine-orm


【解决方案1】:

天哪。我已经谈过了。太糟糕了,它是in french

没关系,我非常同意你的观点,如果你的输入数据在实体中不好,抛出异常没有任何问题。

此外,对我来说,Doctrine 对这种用法没有任何限制。实际上,贫血模型记录在官方 Doctrine 文档中。所以是的,Doctrine 支持非贫血模型并不明显。但是感谢awesome contributors,时代变了。

我想“解决”您的问题,但我没有看到任何问题。我希望我给了你所期望的。

【讨论】:

    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    相关资源
    最近更新 更多