0

ZendFrameworkプロジェクトでDoctrine2を使用していますが、問題を解決するのは簡単ではありません...

したがって、ユーザーがページに正常にログインしたら、オブジェクトをセッションに入れます。

Zend_Auth::getInstance()->getStorage()->write($user);

すべて正常に動作しますが、ページを更新してユーザーをセッションからロードすると、次のようになります。

$user = Zend_Auth::getInstance()->getStorage()->read();

そして、この$ userでは、Doctrine2の操作を実行できません:-/。たとえば、「getId()」メソッドを使用できますが、たとえば、任意のリレーションで$userを使用しようとすると次のようになります。

$session = new App_Model_LogSessions();
$session->setUser($user);
...

Doctrine2の例外が表示されます。

エンティティApp_Model_Usersは管理されていません。エンティティは、データベースからフェッチされた場合、またはEntityManager#persistを介して新規として登録された場合に管理されます。

どうすればこれを修正できますか?エンティティを「リロード」する方法はありますか?セッションを使用する必要があります。すべてのページリクエストでデータベースからユーザーをロードしたくありません。彼を一度ロードして、セッションに入れたいと思います。

ありがとう!

4

2 に答える 2

1

セッションで Doctrine エンティティを保存する (基本的に必要なもの) は、ここで回答されています: Doctrine 2: エンティティをセッションに保存できますか?

そのエンティティをどのように使用するかによって異なりますが、配列への変換は非常に簡単であると同時に、仕事になる可能性があります。エンティティ (永続化など) として使用することはできませんが、データにアクセスすることはできます。

于 2012-07-27T08:24:22.377 に答える
0

実際の ID のみを保存し、キャッシュを使用することをお勧めします。ただし、問題を解決するために、いつでもエンティティを再接続できます。

これはあなたがそれを行う方法です(私はそれを行うことをお勧めしませんが、とにかく:-P)

// Assume that $em is a instance of the EntityManager
$attachedObject = $em->merge($object);
于 2012-08-03T08:24:23.860 に答える