プラグインにできること
・新規ページの作成
・既存機能の変更・拡張
フックポイントとは?
特定の処理の前後に処理を介入させられる仕組み。
フックポイントには2種類ある。
一つは、「Middleware」で、
アプリケーションの開始・終了時/コントローラーの呼び出し・終了時/決済処理時に処理を介入することげ出来るし、すべてのControllerに対して介入が出来る。
もう一つは、「FilterResponseEvent」である、
Responseが返却され描画される直前のHTTP HeaderやBodyを書き換えることが出来る。HTMLだけでなく、JSONで返却したいなどの変更も可能。
ユーザ
↓
[Appication::run()]
↓ ◯ フックポイント―Middlewareアプリ処理前
[ProductController::edit()] (アプリ処理)
↓ ◯ フックポイント―Middlewareアプリ処理後
[Application::render()] (レンダーイベントとも呼ぶ)
↓ ◯ フックポイント―FilterResponseEvent
※ レンダーイベントとは英語でrender event、renderとは「描画する」の意味。
フックポイントの命名規約
・アプリケーション全体のフックポイント
eccube.event.app.{ before | after }
・コントローラーイベントのフックポイント
eccube.event.controller.{ルーティング名}.{before | after | finish }
・レンダーイベントのフックポイント
eccube.event.render.{ルーティング名}.before
※ルーティング名
src/Eccube/ControllerProvider/FrontControllerProvider.php
src/Eccube/ControllerProvider/AdminControllerProvider.php内で定義されています。
bind()の引数がルーティング名になる。
$c->match(‘/’, ‘¥Eccube¥Controller¥Admin¥AdminController::login’)->bind(‘admin_login’);
EC-CUBE3インストールデフォルトなら、例えば、お問い合わせ画面がcontactとして、以下のように定義されている。
1 2 3 |
// contact $c->match('/contact', '\Eccube\Controller\ContactController::index')->bind('contact'); $c->match('/contact/complete', '\Eccube\Controller\ContactController::complete')->bind('contact_complete'); |
以下のコマンドで定義済みルーティング一覧をコンソールで表示することも可能。
1 |
$ app/console router:debug |
フックポイントで処理を介入させるには
フックポイントには2つのパターンが有ります。
一つは、Middlewareによる方法と、もう一つは、FilterResponseEventによる方法です。
Middlewareを使用する場合、
アプリケーションの開始・終了時に処理を介入させることが出来ます。
まず、event.ymlに利用するフックポイント・メソッド名・優先順位を記述する。
FilterResponseEventを使用する場合は、
描画されるコンテンツや、ヘッダを書き換えることが出来る。
また、管理画面のナビゲーションを拡張したり出来る。
入力フォームの拡張
FormEventを使って、フォーム送信時の処理の介入することが出来る。
/src/Eccube/Form/Typeに定義されているすべてのフォームに対して介入が可能である。
介入は以下のタイミングで行うことが出来る。
・onPreSetData:$form->setData()の前
・onPostSetData:$form->setData()の後
・onPreSubmit:$form->submit()の前
・onSubmit:?????????(参考URL)
・onPostSubmit:$form->submit()の後
(/src/Eccube/Event/FormEventSubscriber.phpを参照)
プラグインをインストールすると
プラグインをインストールするとZIPされたソースが
/app/Plugin/{プラグイン名}内に移動される。