0

我有 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
}
4

0 回答 0