事件订阅者
在 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', ]; }