我用 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
保持虚假...也许我做得不对...
如果有人有想法...