2016-05-04 6 views
0

私のプロジェクトでは、ライフサイクルコールバックのような機能が必要な複数のエンティティがあります。他のエンティティを更新したいので、私は 'lifecyclecallback like'と言っています。エンティティリスナやサブスクライバを使って親エンティティや子エンティティを更新するのは悪い習慣です。だから私はイベントを使うのが一番良いと思っていました。Symfonyカスタムイベント

たとえば、Topicと多対1に関連するPostエンティティがあります。新しいPostを作成するときに、そのイベントを更新するときに、そのイベントを作成したいと思います。最初に、これらのイベントをすべて含むPostEventクラスを作成できたと思いますが、docsが示唆しています各イベントごとに別々のクラスを作成します。だから、私の場合、私は

  • PostRemoveEvent
  • PostEditEvent
  • PostCreateEvent
    • などの等...

    これは私には本当に退屈なようで何かを持っているだろう、私は終わるだろう似たような目的のファイルやクラスがたくさんあります。私はFosUserBundleがいくつかの同様の機能を提供していることに気付きましたが、何が起こっているのか分かりません。 私はこれを間違っていますか?これらのイベントを派遣するには良い方法がありますか?

  • 答えて

    0

    ソリューションを後で使用するためにバンドルとして作成する場合は、さまざまなイベント(PostCreateEvent、PostEditEventなど)が適しています。それが特定のアプリケーションの一部に過ぎない場合は、ビジネスロジックを作成するハンドラを作るだけで十分だと思います。このハンドラはコントローラから呼び出すことができます。

    1

    異なるイベントは異なる値を保持します。

    例えば、PostEditedEventはdiffを保持し、PostDeletedEventは削除された投稿のIDを保持するだけで、投稿が作成された初期値を保持すると思います。

    これらの値が同じ場合(これについて2回考えてください)、それらを1つのイベントクラスにまとめることができます。これはすべてあなた次第であり、EventDispatcherコンポーネントはまったく気にしないことに注意してください。小さなヒントとして

    、あなただけではなく、何かが起こったことを外の世界を通知するいくつかアクションを行いたい場合は、代わりにコマンドおよびコマンドバスを使用することを検討してください。例えばSimpleBusの著者によってthese blogpostsを参照してください。