2012-11-11 13 views
9

私はZend Framework 2アプリケーションでDoctrine 2を使用しています。 Doctrineによって返されたエンティティに依存関係を注入するためにZF2を使用する方法はありますか?エンティティは、データベースから検索されたときにDoctrineによって構築されます。私がZF2に依存関係を注入するために知っている限り、私はService Locatorを使用してエンティティをインスタンス化する必要があります。 Doctrineのコードベースを変更することなくDoctrineとどのように統合できるのか分かりません。私が現在見ることのできる唯一の実行可能な解決策は、Doctrineから返された結果を受け取り、必要な依存関係を注入する小さなサービスを書くことです。より洗練されたソリューションはありますか?ZF2 with Doctrine 2 - エンティティでの依存関係の注入

よろしく クリスチャン

+0

何あなたは正確に注射したいですか?エンティティに何かを注入することが意味をなさないケースは考えられません。あなたが望むことをコンセプトに収める方法があると確信しています。 –

+0

私はその間に別の方向をとった。エンティティ自体に委任したいことが、エンティティを管理するサービスに委任されるようになりました。したがってエンティティに何かを注入する必要はもうありません。 – griesi

答えて

16

教義EventManagerに見て、特に、EventManagerによってエンティティがデータベースからロードされるたびに発射されるpostLoadライフサイクルイベント、。

すべてをZF2に接続するには、いくつかのことをする必要があります。

まず、教義風味のイベントリスナーを記述します。

<?php 
class InjectStuffListener { 
    private $sl; 

    public function __construct($serviceLocator){ 
     $this->sl = $serviceLocator; 
    } 

    public function postLoad($eventArgs){ 
     $entity = $eventArgs->getEntity; 
     $entity->setThingToBeInjected($this->sl->get('some.thing')); 
    } 
} 

その後、いくつかのModule.phpのようなどこかで(多分そこonBootstrapよりもより良い場所だが、何でも):

<?php 
public function onBootstrap(){ 
    $sm = $e->getApplication()->getServiceManager(); 
    $em = $sm->get('doctrine.entitymanager.orm_default'); 
    $dem = $em->getEventManager(); 
    $dem->addEventListener(array(\Doctrine\ORM\Events::postLoad), new InjectStuffListener($sm)); 

} 
+0

はい、ZF2によって管理される依存関係を注入するために、これをZF2サービスロケータ/サービスマネージャとどのように接続できるかはわかりません。エンティティ自体は、サービスロケータによってインスタンス化されていないため、サービスロケータについては認識しません。 – griesi

+0

@griesi - リスナーを初期化し、ZF2ブートストラップ中にdoctrineのEventManagerにアタッチするサンプルコードのための私の編集を参照してください。 – timdev

+0

ありがとうございましたこれはまさに私が – griesi

関連する問題