php - 使用 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
保持虚假...也许我做得不对...
如果有人有想法...
解决方案
推荐阅读
- javascript - Frida 新建一个匿名类对象并挂钩它的方法?
- c - 终止字符数组
- grpc - grpc-java 异步客户端(带有 grpc C++ 异步服务器)
- elixir - 更新 Ecto 中的现有数据时,我应该使用变更集吗?
- c++ - 如何用不同大小的向量初始化二维向量
- symfony - Doctrine 不使用模式或数据库前缀创建表,也不使用 `schema` 属性
- javascript - 如何将 11 到 30 之间的整数乘以 0.015?
- google-chrome-devtools - Chrome 或 FF 网络开发工具,如何在网络监视器关闭的情况下重新加载页面?
- android - startLeScan 方法没有得到任何结果
- android - 我需要将设备注册令牌发送到 fcm 控制台吗?