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