关于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',
    ];
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理