WidgetとPersonの2つのクラスがあります。Widget クラスは、所有者として Person のインスタンスを参照します。それらはdoctrine2を介してデータベースに保存/取得されます。
ウィジェットの所有者を選択できる選択を含むウィジェットの詳細を入力する Zend Framework 2 フォームを作成しました。このフォーム要素は、所有者に設定される Person オブジェクトの ID をポストバックします。
現在の状態では、Widget クラスの setOwner() メソッドは Person 型のオブジェクトまたは ID を取り、Doctrine2 エンティティ マネージャを使用してデータベースからロードできます。
これは機能しますが、Widget オブジェクトがデータベースからの読み込みを処理しており、これを行うにはエンティティ マネージャーにアクセスする必要があるため、最善の方法ではないと思います。
私が現在理解しているように、これを行うことができる唯一の2つの方法は、私がそれを機能させる方法か、オブジェクトをハイドレートする前にデータベースからオブジェクトを釣り上げる新しいハイドレーターを作成するか、別の方法がありますか?
アーキテクチャをできる限り整然としたものにしたいので、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
}