Php 学说2.x积垢

Php 学说2.x积垢,php,codeigniter,doctrine-orm,Php,Codeigniter,Doctrine Orm,我听到了很多关于ORM学说的好消息。我可以花很多精力学习条令使用一个伟大的教程,如,但它是相当过时的,是使用条令1.x。为了节省时间,我更喜欢立即学习教义2.x 我设法结合Codeigniter 2.0.3安装了条令2.1。我已经完成了一些基本操作,比如添加新对象并将它们保存到数据库中。现在我正在尝试一些不应该太难的方法,但我已经花了相当长的时间来了解如何做到以下几点: 如果我想使用$\u POST数据创建一个对象,我不想在代码中单独分配每个属性。我更喜欢像$u->fromArray这样的东西,

我听到了很多关于ORM学说的好消息。我可以花很多精力学习条令使用一个伟大的教程,如,但它是相当过时的,是使用条令1.x。为了节省时间,我更喜欢立即学习教义2.x

我设法结合Codeigniter 2.0.3安装了条令2.1。我已经完成了一些基本操作,比如添加新对象并将它们保存到数据库中。现在我正在尝试一些不应该太难的方法,但我已经花了相当长的时间来了解如何做到以下几点:

如果我想使用$\u POST数据创建一个对象,我不想在代码中单独分配每个属性。我更喜欢像$u->fromArray这样的东西,例如,如中所示

$data = array(
'username' => 'myuser',
'password' => 'mypass',
'email' => 'my@email.com'
);

$u = new User();
$u->fromArray($data);
$u->save();
资料来源:

但是,fromArray()不再存在于Doctrine 2.x中。在原则2.x中是否有fromArray()的等价物


第二个问题:我发现很难开始。官方文件主要侧重于学说。如果有一个实际的例子,包括表单验证、crud操作等,那将是非常好的。如果有一个使用Doctrine 2的MVC示例项目,那将是非常好的。有人知道这样的教程或示例项目吗?

在我所看到的每个示例中以及在我使用Doctrine2编码的经验中,从$\u POST数据创建对象的正确方法是使用实体类中的setter分别设置每个属性

fromArray()看起来确实很方便,但知道Doctrine2是如何处理关联的,我看不出它能让你走多远

关于Doctrine2的一个好的CRUD教程,您可能会喜欢《带Zend框架的简易PHP网站》一书中的内容。这本书本身是关于ZF而不是CodeIgniter的,但是示例章节中很少有Zend特定的内容。但是,您可能更喜欢远离z2d2示例存储库


除此之外,该网站还提供了大量关于适用于CRUD上下文的Doctrine2的有用问题和答案。继续发帖,我相信我或这里的其他人能帮上忙。

答案真的是由你决定。您的实体只是普通的旧PHP对象——因此,您可以向它们传授技巧(比如实现fromArray()方法),或者围绕它们构建基础设施

有些选项可能适合您的用例,也可能不适合您的用例:

  • 为填充属性的实体编写构造函数:
    新文章($title、$author、$abstract、$body)
    新文章($arrayOrObject)
  • 编写一个静态工厂方法
  • 编写自己的fromArray()实现
  • 在一个抽象类中编写您自己的fromArray()实现,您的所有实体都将继承该抽象类,并根据需要重写它

您可以使用一些第三方条令模块将数组转换为对象,例如,而不是实现fromArray()或populate()。例如,您可以执行以下操作:

use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;

$hydrator = new DoctrineHydrator($objectManager);

$data = array(
    'username' => 'myuser',
    'password' => 'mypass',
    'email' => 'my@email.com'
);

$user = new User();
$user = $hydrator->hydrate($data, $user);

$em->persist($user);
$em->flush();