模式:大概是通过一个自定义的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也被注册,也能得到通知。
发现两种方式似乎没太大区别,一个静态注册,另一个动态注册,留着以后再说吧