事件原理:通过观察者模式,实现的事件订阅,事件的监听。
事件目录:/app/Events
监听目录:/app/Listeners
创建事件与监听
创建一对事件和它的监听器:
php artisan make:event MyEvent
php artisan make:listener MyListener --event=MyEvent
生成两个文件:
/app/Events/MyEvent.php
<?php
namespace App\Events;
use ...
class MyEvent{
use Dispatchable, InteractsWithSockets, SerializesModels;
public function broadcastOn(){
return new PrivateChannel('channel-name');
}
}
/app/Lisnteners/MyListener.php
<?php
namespace App\Listeners;
use ...
class MyListener{
//当事件发生时,该监听器执行的方法,返回 false 将中断事件传递
public function handle(MyEvent $event){
}
}
注册事件与监听
/app/Providers/EventServiceProvider.php 用来注册事件与监听器
<?php
namespace App\Providers;
use ...
class EventServiceProvider extends ServiceProvider{
//方式一:注册事件监听的映射,格式:['事件'=>['监听1','监听2']],
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
MyEvent::class => [MyListener::class],
];
//也可以在这里注册
public function boot(){
//方式二
Event::listen(MyEvent::class, [MyListener::class, 'handle']);
//方式三:闭包监听
Event::listen(function (PodcastProcessed $event) {
//
});
//方式四:通配监听
Event::listen('event.*', function ($eventName, array $data) {
//
});
}
//是否自动发现事件和监听器,这样注册的监听器,通过参数类型来判断要监听的事件
public function shouldDiscoverEvents(){
return false;
}
}