2017-03-10 9 views
2

でEntityManagerをinlcludeするためにどのように私はそのため私は、データベースにChangeSetを保存する必要がEntityListenerドクトリン/ symfonyは:EntityListener

/** 
* Class BaseInformationListener 
* @package AppBundle\EventListener 
*/ 
class BaseInformationListener 
{ 
    /** 
    * @ORM\PreUpdate 
    * 
    * @param BaseInformation $baseInformation 
    * @param PreUpdateEventArgs $event 
    */ 
    public function preUpdateHandler(BaseInformation $baseInformation, PreUpdateEventArgs $event) 
    { 
     dump($baseInformation); 
     dump($event->getEntityChangeSet()); 
    } 
} 

を持つエンティティBaseInformation

/** 
* @ORM\Entity 
* @ORM\EntityListeners({"AppBundle\EntityListener\BaseInformationListener"}) 
* @ORM\Table(name="BaseInformation") 
*/ 
class BaseInformation 
{ ... 

を持っています。しかし私はEntityManagerへのアクセス権がありません。私はそれからサービスを作ることができますが、リスナーはエンティティの注釈を自動的に呼び出されます。では、ChangeSetを保存するためにEnttiyManagerにアクセスするにはどうすればよいですか?

+0

doctrineのどのバージョンをお使いですか? – Matteo

+0

おそらく明白な見落としですか? $ event-> getEventManager(); http://www.doctrine-project.org/api/orm/2.5/class-Doctrine.ORM.Event.PreUpdateEventArgs.htmlこれらの種類のイベントの中でエンティティマネージャを使用しようとしてもうまくいきません。 – Cerad

答えて

1

あなたがリスナーにサービスを定義し、あなたはあなたに通常必要な依存関係を使用できるようにEntityListenerとしてそれにタグを付けることができます。

services: 
    base_information_listener: 
     class: AppBundle\EntityListener\BaseInformationListener 
     arguments: ['@doctrine.orm.entity_manager'] 
     tags: 
      - { name: doctrine.orm.entity_listener } 

前教義2.5にあなたはまた、関連するエンティティにアノテーションを使用する必要があります(as described in the doc)。

希望のヘルプ

+1

これを試してみましたが、この例外があります:ORMException ORMException.php 38行目:メタデータドライバを指定し、それをDoctrine \ ORM \ Configuration :: setMetadataDriverImpl()に渡す必要があります。私がエンティティマネージャー – Zwen2012

+1

hi @ Zwen2012を取得するためにサービスでを設定しているため、問題は[ここのgithub](https://github.com/ Doctrine/DoctrineBundle/issues/300)最後のコメントに記載されているようにコンテナ全体を注入することはできますが(それはベストプラクティスではありません)、または解決することができます(リリースは14日前) – Matteo

関連する問題