事件订阅者
在 Laravel 的事件零碎 中说到,一个事件能够对应多个监听器,但一个监听器只监听一个事件。
那么如果想在一个类中订阅多个事件,例如在订单发货、签收、退货事件产生时,都须要进行“发短信操作”,该如何解决呢,这时候能够应用事件订阅者。
事件订阅者能够在类外部订阅多个事件,即在单个类中定义多个事件处理器。
编写事件订阅者
<?php
namespace App\Listeners;
use Illuminate\Auth\Events\Login;
use Illuminate\Auth\Events\Logout;
class UserEventSubscriber
{
/**
* 解决用户登录事件
*/
public function handleUserLogin($event) {}
/**
* 解决用户登记事件
*/
public function handleUserLogout($event) {}
/**
* 为事件订阅者注册监听器
*
* @return array
*/
public function subscribe()
{
return [Login::class => [UserEventSubscriber::class, 'handleUserLogin'],
Logout::class => [UserEventSubscriber::class, 'handleUserLogout'],
];
}
}
注册事件订阅者
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
/**
* 利用的事件监听器映射
*/
protected $listen = [//];
/**
* 被注册的订阅者类
*/
protected $subscribe = ['App\Listeners\UserEventSubscriber',];
}