首页 > 解决方案 > 使用 Livewire 和 Echo 在 Laravel 中捕捉事件

问题描述

我用 Laravel、Livewire、Laravel echo 包和 pusher 做了一个 laravel 聊天测试。

我有一个带有不同房间列表的主房间,用户可以移动到每个房间与他人聊天。在每个不同的房间里,我都有连接的用户列表。

一切顺利。

所以,现在,我想在主房间显示相同的用户列表,如果其中一个移动到另一个房间,显示用户仍然连接以及他移动的房间的名称。

为此,我创建了一个这样的事件“userConnected”:

class userConnected implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $room;
    public $user;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(Room $room, $user)
    {
        $this->room = $room;
        $this->user = $user;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('rooms');
    }
}

然后,当用户加入房间时,我发送事件:

public function joining($user)
    {
        if(! in_array($this->users, $user)) {
            
            $this->users[] = $user;
            // envoyer evenement : room
            $this->emit('newConnection');
            

            broadcast(new userConnected($this->room, $user))->toOthers();
        }
    }

之后,在我的 livewire 房间控制器中,我像这样收听事件:

protected function getListeners() 
    {
        return [
            "echo-presence:rooms,here" =>'here',
            "echo-presence:rooms,joining" =>'joining',
            "echo-presence:rooms,leaving" =>'leaving',
            'newConnection' => 'newConnection',
            "echo-private:rooms,userConnected" => 'newConnection',

        ];
    }

我的方法:

public function newConnection() 
    {
        $this->stillConnected = true;
    }

当然,我的 channels.php 文件:

Broadcast::channel('connected', function ($users) {
    return $users;
});

我的问题是:现在,如何在我的房间主 livewire 控制器中捕捉事件?

因为他们什么都没有发生...

我的变量:

$stillConnected

保持虚假...也许我做得不对...

如果有人有想法...

标签: phplaraveleventspusherlaravel-livewire

解决方案


推荐阅读