目次
環境
- [EC-CUBE] EC-CUBE3.0.16
フックポイントはプラグインから本体の挙動に手を加える重要なポイントである。
フックポイントと一言に言うが、大きく分けて3種類あり、けっこう挙動が違う。
- 共通フックポイント
- Controllerからdispatchされるフックポイント
- テンプレートフックポイント
共通フックポイント
これについてはちゃんとプラグイン仕様に書かれているのだけれど、今一つ理解できていなかった。
共通フックポイントでは、HttpKernelのライフサイクルの各ステップで処理を差 し込むことができます。
つまり、ユーザーから1回httpリクエストが来ると、これら5つのフックポイントをキックしながら処理される、ということらしい。
各ステップは、以下のとおりです。
/1. Request
/2. Controller
/3. Response
/4. Exception
/5. Terminate
後述する「Controllerからdispatchされるフックポイント」は、2の「コントローラ実行前」イベントと3「レスポンス生成時」イベントの間で発生することになる。
特に「eccube.event.route.[route]」は各route処理にフックできるので使いどころも多そうだが、各タイミングで具体的にどんな値に干渉できて、どんな場面で使えるのかがイメージしづらく、初心者にはつらい。
Controllerからdispatchされるフックポイント
プラグインを作っていてよく目にするのがこのControllerからdispatchされるフックポイント。
画面に表示される値を変更したり、formのデータを取得したりといろいろ。
この書式に合わせて書けば、オリジナルのフックポイントをdispatchすることもできるだろうと思うけれど、まだ試したことはない。
テンプレートフックポイント
テンプレートフックポイント
Twigテンプレートを表示する時にキックされるフックポイント。これもプラグイン仕様書に紹介されている。
[プラグイン仕様書(plugin.pdf)] [イベント | EC-CUBE 開発ドキュメント]
event.yml
に記述する時には、テンプレート名がそのままフックポイント名になる。入ってくる引数はTemplateEvent
。
Shopping/index.twig: - [onShoppingIndexRender, NORMAL]
テンプレートの内容を書き換えるなどの処理ができる。
テンプレートに何らかの値を渡したい時には、テンプレートフックポイントから渡すと良い。
共通フックポイントとの流れで言うと、たぶんTemplateをレンダリングしてからResponse生成処理のはずなので、Templateイベント→Responseイベントという順番で発火するはず。
まとめ
時系列でまとめると、以下の順になるはず。
/1. Request /2. Controller Controller内でdispatchされるイベント Templateイベント /3. Response /4. Exception /5. Terminate