我正在Laravel 9.42.2中构建一个应用程序,并设置了Laravel Echo和Soketi来广播事件。我可以成功地在公共频道上发送和接收广播,但我不知道如何在私人频道上广播。
根据文档,我可以用下面的示例代码做到这一点:
Echo.private(`orders.${orderId}`)
.listen('OrderShipmentStatusUpdated', (e) => {
console.log(e.order);
});
我不明白的是${orderId}
在哪里传递给JavaScript,我可以用PHP在后端创建私有通道,但我不知道前端应该在哪里接收它需要填充侦听器中占位符的变量。
我考虑过的方案:
- 在每个响应的前面查询数据库,并将所有可能的ID列表发送回用户,以便存储起来供需要时使用(即,将与用户相关的所有
orderId
作为数组,并使用循环为每个数组创建侦听器)。我担心这会增加许多不必要的数据库访问,并为可能不需要的内容增加页面加载时间的开销。 - 在控制器中添加一行,在调用事件调度之前将orderId解析为json。不知道为什么感觉不对,但确实如此。
1条答案
按热度按时间u91tlkcl1#
你可以通过这个技巧。
orderId可以是页面url的一部分,也可以由模板中的隐藏元素表示,例如:
如果选择隐藏元素,只需获取其值并传递给Echo.private()方法。