我有 2 个类,Widget 和 Person。Widget 类引用 Person 的一个实例作为它的所有者。它们通过教义2从数据库中存储/检索。
我创建了一个 Zend Framework 2 表单来输入 Widget 的详细信息,其中包括一个选择,您可以在其中选择 Widget 的所有者,此 Form 元素回发要在所有者处设置的 Person 对象的 id。
在当前状态下,Widget 类的 setOwner() 方法将采用 Person 或 id 类型的对象,然后可以使用 Doctrine2 实体管理器从数据库中加载该对象。
虽然这可行,但我认为这不是最好的方法,因为 Widget 对象正在处理来自数据库的加载,并且它需要访问实体管理器才能执行此操作。
据我目前了解,我可以做到这一点的唯一两种方法是我让它工作的方式,或者通过创建一个新的 Hydrator 来在对对象进行 Hydrating 之前将对象从数据库中取出,或者是否有另一种方法?
我希望架构尽可能整洁,所以我想知道人们认为在 ZF2 中实现这一点的最佳方式是什么?
这是我目前拥有的设置:
class Widget {
protected $id;
protected $name;
protected $owner;
// Doctrine Entity Manager
protected $entityManager;
public function __construct($entityManager)
{
$this->entityManager = $entityManager;
}
// methods, getters & setters
public function setOwner($owner)
{
if (is_object($owner) && $owner instanceof Person)
{
$this->owner = $owner;
}
else if (is_scalar($owner)
{
$this->owner = $this->entityManager->find('Person', $owner);
}
}
}
class Person {
protected $id;
protected $name;
// other member variables & methods
}