阅读(895) (11)

Laravel 8 定义广播事件

2021-06-30 16:36:16 更新

要通知 Laravel 应该广播给定事件,并在该事件上实现 Illuminate\Contracts\Broadcasting\ShouldBroadcast 接口。此接口已导入到框架生成的所有事件类中,因此你可以轻松地将其添加到任何事件中。

ShouldBroadcast 接口要求你实现一个方法: broadcastOnbroadcastOn 方法应该返回事件应该广播的频道或频道数组。 该频道应该是 ChannelPrivateChannel ,或者 PresenceChannel 的实例。Channel 的实例 代表任何用户可以订阅的公共频道, PrivateChannelsPresenceChannels 实例代表需要频道授权的私有频道:

<?php

namespace App\Events;

use App\Models\User;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Queue\SerializesModels;

class ServerCreated implements ShouldBroadcast
{
    use SerializesModels;

    public $user;

    /**
     * 新建一个新的事件实例。
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    /**
     * 获取事件应广播的频道。
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('user.'.$this->user->id);
    }
}

那么, 你仅仅需要像平常那样 触发事件 。事件一旦触发, 一个 队列任务 将通过你指定的广播驱动程序广播该事件。