为什么Doctrine 2没有基本的验证方法来验证所有值是否适合实体属性?

Yos*_*sef 2 orm doctrine datamapper doctrine-orm

我是学说2的新人.

为什么Doctrine 2没有基本的验证方法来验证所有值是否适合实体属性?

我的问题目标是更多地了解学说2如何工作以及为什么不说教义2中的错误.(主要是因为我是新的我错过了一些关于教义2设计方式的理解)

例:

<?php
// entities/User.php
/**
 * @Entity @Table(name="users")
 **/
class User
{
    /**
     * @Id @GeneratedValue @Column(type="integer")
     * @var int
     **/
    protected $id;

    /**
     * @Column(type="string")
     * @var string
     **/
    protected $name;

}
Run Code Online (Sandbox Code Playgroud)

使用build in validate的代码示例(不需要连接到db,只验证@Column(type ="integer"))在doctrine 2中不存在的基本函数:

$user=new User();
$user->setId('trtr');
$user->setName("goodname");
if($user->validate()){
  echo 'ok';
}
else{
  echo $user->validateError();
}

//output: id of User should be integer and not string
Run Code Online (Sandbox Code Playgroud)

谢谢

Ocr*_*ius 5

Doctrine ORM假定您持久存在的实体处于有效状态.这是持久层的唯一工作,并且向其添加验证将是错误的.如果您的实体中包含无效数据,则您已经拥有了无法保存的无效对象图.

所以请记住,如果你有一些像这样的API

$someEntity->isValid();
Run Code Online (Sandbox Code Playgroud)

然后有些东西可能是错误的,因为实体应该始终有效,并且它的任何依赖性应该在构造时设置并在setter/getters中处理,以便对象永远不会达到不一致状态.