Laravel 5.5 を使ってプラグイン機能を作ろうと考えています。
コントローラーで何かをする際にイベントを発火し、紐付けられたプラグインの関数が実行されるという流れです。
例えばユーザーを表示したときはこのようにしています。
php
1$user = User::find($id); 2event( new MyAppEvent('page_user_show', ['user' => $user]) );
ひとまずイベントを発火させるところまでは作り終えました。
あとはこのイベントの発火時、「page_user_show」のタイミングで関連するプラグインのメソッドを実行したいのですがどこにどのような形でこの関連付けを行えばいいのかわからず手詰まりになっています。
プラグイン側は ServiceProvider を継承していて、App::register() によってアプリケーション起動時に登録されるようにしてあります。
php
1namespace Plugin\Hello\Providers; 2 3use Illuminate\Support\ServiceProvider; 4 5class HelloServiceProvider extends ServiceProvider 6{ 7 public function boot() 8 { 9 // 10 } 11}
現状プラグインのサービスプロバイダーは正常に読み込まれており、アプリケーション起動時に各プラグインの boot() が呼ばれる状態です。
このあたりで addCallback('page_user_show', function($args){...})
のような形で実装できるのではないかと思っています。
本来であれば各コールバックごとにイベントクラスを用意してEventServiceProvider で listen するべきとは思いますが、1つの MyAppEvent でまとめられたら理想的です。
このようにイベント発生時に「page_user_show」という名前が渡された時、この名前に紐付けられたすべてのプラグインのメソッドを実行するにはどのようにして関連付けをすればいいのでしょうか?
根本的におかしいようであれば全く別の手段でもかまいません。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。