2011-12-30 11 views
0

私は、ユーザーオブジェクトのためのPrePersist & PreRemoveイベントをリッスンUserListenersymfony docs page)を持っている教義2とsymfonyの2を使用しています。ユーザーを永続化する場合、UserUserInventoryインスタンスを作成したいとします。 UserInventoryは、(一方向の)関連の所有側です。無限ループイベント・リスナーを持つエンティティを永続

ただし、この設定で、私は無限ループが発生します。

class UserListener { 

    /** 
    * Initializes UserInventory for user with initial number of nets 
    */ 
    public function prePersist(LifecycleEventArgs $args) { 
     $em = $args->getEntityManager(); 
     $user = $args->getEntity(); 
     $inventory = new UserInventory(); 
     $inventory->setUser($user); 
     $inventory->setNumNets($this->initialNets); 
     $em->persist($inventory); // if I comment out this line, it works but the inventory is not persisted 
     $em->flush(); 
    } 

} 

それはUserInventoryは協会の所有側であるので、それが再び呼び出され、この関数が得られ、再びユーザーを保持しようとするかもしれませんか?これをどうすれば解決できますか?

「正しい」バンドルになっているので、ここに私のUserInventoryがアソシエーションを所有したいと思っています。私はUserBundleを持っていますが、在庫クラスはそこにあるはずです。

UPDATEError/Log

答えて

1

あなたは、アプリケーション内のすべてのentitesのリスナーを追加しました。もちろん、オブジェクトを永続化すると、 UserInventory、prePersistが何度も何度も呼び出されます。 symfonyのドキュメントとして は、あなたは、単にチェックを行うことができます言う:

if ($user instanceof User) { 
     $inventory = new UserInventory(); 
     $inventory->setUser($user); 
     $inventory->setNumNets($this->initialNets); 
     $em->persist($inventory); 
    } 

また、私はdoctrine2約eventsを読むことをお勧めします。

関連する問題