模式:大概是通過一個自定義的event,一個handler,還有一個binder,然后用來簡化通知模型
?
生成自定義的event
./artisan make:event MyEvent
?
生成自定義的handler
./artisan handler:event MyEventHandler --event=MyEvent
?
然后在EventServiceProvider里面添加,可以添加多個,演示就只注冊一個了
protected $listen = ['App\Events\MyEvent' => ['App\Handlers\Events\MyEventHandler',],];
?
如果你要多個handler,可以先在EventServiceProvider里面寫好,然后命令
./artisan event:generate
?
觸發event
$aaaa = 'sfsdfsdf'; $response = Event::fire(new App\Events\MyEvent($aaaa));
你會發現,在handler的handle方法被觸發,不過看phpdoc,這個方法似乎是void返回,不知道這個response有什么用處
?
--------------------------------------------------------------------------------------------------------------------------------------------
?
注冊event事件組
保留上面的MyEvent,別的不要了
注冊我們的MyEventGroupHandler,這里演示一個event,subscribe方法必須定義
<?php namespace App;class MyEventGroupHandler {/*** Handle user login events.*/public function onMyEvent($event){echo "MyEventGroupHandler";dd($event);}/*** Register the listeners for the subscriber.** @param Illuminate\Events\Dispatcher $events* @return array*/public function subscribe($events){$events->listen('App\Events\MyEvent', 'App\MyEventGroupHandler@onMyEvent');} }
?
動態注冊監聽event
$subscriber = new App\MyEventGroupHandler; Event::subscribe($subscriber);
?
觸發事件
$podcast = 'sfsdfsdf'; $response = Event::fire(new App\Events\MyEvent($podcast));
?
xdebug發現,MyEventGroupHandler的onMyEvent被斷下
如果原來的myEventHandler也被注冊,也能得到通知。
?
?
發現兩種方式似乎沒太大區別,一個靜態注冊,另一個動態注冊,留著以后再說吧