このチュートリアルの指示に従いました: http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html、エンティティの挿入または更新時にDoctrineによってディスパッチされるイベントをリッスンする単純なリスナーを作成しました. preInsert および postInsert イベントは正常に機能し、新しいエンティティの作成時にディスパッチされます。ただし、エンティティの更新時に preUpdate と postUpdate が呼び出されることはありません。同じことが onFlush にも当てはまります。補足として、基本的な CRUD 操作をサポートするコンソールで生成されたコントローラーがあり、そのままにしておきます。
以下は、私がこれを行っている方法を示すためのいくつかのコード スニペットです。
config.yml
annotation.listener:
class: City\AnnotatorBundle\Listener\AnnotationListener
tags:
- { name: doctrine.event_listener, event: postUpdate}
リスナーの実装 (簡単にするために、他の関数を省略し、postUpdate のみを残しました)
class AnnotationListener
{
public function postUpdate(LifecycleEventArgs $args)
{
$entity=$args->getEntity();
echo $entity->getId();
die;
}
}
エンティティ ID は表示されず、スクリプトは関数の最後のダイにかかわらず、完了するまで実行を続けます。