Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

ECCUBE3のフックポイントを整理する

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

目次

環境

フックポイントはプラグインから本体の挙動に手を加える重要なポイントである。

フックポイントと一言に言うが、大きく分けて3種類あり、けっこう挙動が違う。

  • 共通フックポイント
  • Controllerからdispatchされるフックポイント
  • テンプレートフックポイント

共通フックポイント

これについてはちゃんとプラグイン仕様に書かれているのだけれど、今一つ理解できていなかった。

plugin.pdf

共通フックポイントでは、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

参考記事