このチュートリアルの指示に従っています:http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.htmlと、エンティティの挿入または更新時にDoctrineが送出するイベントをリッスンする単純なリスナーを作成しました。 preInsertイベントとpostInsertイベントは正常に動作し、新しいエンティティの作成時に送出されます。ただし、preUpdateとpostUpdateは、何に関係なくエンティティの更新時に呼び出されることはありません。同じことがonFlushにも当てはまります。副作用として、私は基本的なCRUD操作をサポートするコンソール生成コントローラを持っていて、そのまま残しています。doctrine 2でpreUpdateイベントとpostUpdateイベントがトリガーされていません
以下は、私がこれを行う方法を示すためのコードスニペットです。
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が表示されることはありませんし、スクリプトは継続関数の最後にのダイのにもかかわらず、実行が完了するまで実行されます。
真を...:
さて、欠点は、あなたのモデルとロジックを混ぜていることであり、それが可能であれば避けるべきである何かで...
あなたがここにライフサイクルコールバックについての詳細を読むことができます私は他のエンティティとエンティティマネージャ自身、そして場合によっては他のサービスを使用しなければならないので、良い考えではありません。とにかく、問題は今解決されたようです。私はSymfonyの最新バージョンに更新し、キャッシュをクリアして、すべて動作しています。 – tomor
ああ、もしあなたが他のサービス/エンティティを使っているのであれば、この方法には意味がありません:) –