乐趣区

关于php:Laravel-的事件订阅者

事件订阅者

在 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',];
}
退出移动版