Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Symfony2のイベントリスナーについて

2,248 views

Published on

Symfony2のイベントリスナーについて調べてみました。

Published in: Engineering
  • Be the first to comment

Symfony2のイベントリスナーについて

  1. 1. Symfony2のイベントリスナーについて
  2. 2. イベントリスナーとは? ● イベント駆動型プログラミングにおいて、イベントが発生した際に実行される処理の こと ● どのイベントに対してどの処理を行うのかをイベントリスナーとして登録しておく 例)JavaScriptでボタンクリック時の処理もclickイベントのイベントリスナーによるも の
  3. 3. Symfony2のイベント Symfony2の内部では様々なイベントがあり、多数のイベントリスナーがあるが、アプリ ケーションの実装においては以下のイベントに対してイベントリスナーを作成することが 多い ● kernel.request ● kernel.controller ● kernel.view ● kernel.response ● kernel.exception
  4. 4. Symfony2のリクエスト処理の流れ 1. クライアントからのリクエストを受け取る 2. kernel.requestのイベントリスナーが実行される ※1 3. 実行するコントローラーを決める 4. kernel.controllerのイベントリスナーが実行される 5. コントローラーが実行される 6. kernel.viewのイベントリスナーが実行される ※2 7. kernel.responseのイベントリスナーが実行される 8. クライアントへレスポンスを返す ※1 処理2のリスナーがResponseオブジェクトを返した場合は処理 7までスキップされる ※2 コントローラーがResponseオブジェクトを返さなかった場合のみ
  5. 5. イベントリスナーの使いどころ
  6. 6. kernel.request イベント リクエストを受けた直後に発生する 使いどころ ● リクエスト内容の事前確認 ● コントローラーのアクセス制限 ● リクエストの内容を加工したい場合 ○ フィチャーフォンの文字エンコード変換等
  7. 7. kernel.controller イベント コントローラーの実行前に発生する 使いどころ ● コントローラー共通の処理 ● 特定コントローラーのアクションへの事前処理
  8. 8. kernel.view イベント コントローラーがResponseオブジェクトを返さなかった場合にのみ発生する 使いどころ ● CSVやJSONの出力処理を共通化させたい場合
  9. 9. kernel.response イベント コントローラーの実行後に発生する 使いどころ ● HTTPヘッダーの追加 ● レスポンス内容の加工 ○ フィーチャーフォン向けに文字列エンコードを SJISに変更 ● 特定コントローラーのアクションへの事後処理
  10. 10. kernel.exception イベント 例外発生時に発生する 使いどころ ● エラーレポート収集サービスへの送信等
  11. 11. イベントリスナーの追加方法
  12. 12. イベントリスナーの作成 以下のようなイベントリスナーを作成する // src/AppBundle/EventListener/HogeListener.php namespace AppBundleEventListener; use SymfonyComponentHttpKernelEventGetResponseEvent; class HogeListener { public function onKernelResponse(GetResponseEvent $event) { // ここに処理を書く } }
  13. 13. イベントリスナーの設定 services.ymlに作成したイベントリスナーを追加する # app/config/services.yml services: app.exception_listener: class: AppBundleEventListenerHogeListener tags: - { name: kernel.event_listener, event: kernel.request }
  14. 14. まとめ ● Symfony2はイベント駆動でプログラムを書ける ● 抑えておくべきイベントは多くない ● コントローラ共通の処理や、フィルター処理等を書くのに向いている ● イベントリスナーをうまく使えば、コントローラーの処理を軽減できる

×