Laravel 的事件订阅者

Posted 小伍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\',
    ];
}

以上是关于Laravel 的事件订阅者的主要内容,如果未能解决你的问题,请参考以下文章

无法广播客户端事件(连接未订阅频道私聊)

如何在 Laravel Lumen 中实现事件

laravel-echo-server 用户未加入,未订阅套接字服务器

片段实例中带有 Otto 事件总线的 IllegalArgumentException

laravel 事件 & 监听

如何让自定义视图观察包含片段的生命周期事件而不是活动?