【发布时间】:2017-05-04 05:51:20
【问题描述】:
我正在为应用开发聊天/消息功能。当用户发送消息时,我希望触发并广播特定事件。然后,我希望 Laravel Echo 使用 pusher 驱动程序通过 Laravel Echo 在事件的广播频道上收听事件。
我希望 Laravel Echo 实现位于 Vue 组件中并检索通过事件广播的数据。目前,我无法将活动广播到私人频道或仅广播到频道。
这是我所做的:
1) 将配置添加到.env。
2) 向bootstrap.js 添加配置:
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'mykey',
encypted: false
});
3) 在App\Providers\BroadcastServiceProvider 中添加了身份验证检查(如果用户现在登录则返回true):
Broadcast::channel('chat', function ($user) {
// verify that user is recipient of message
return \Auth::check();
});
4) 将App\Providers\BroadcastServiceProvider::class, 添加到App/config/app.php。
5) 创建了事件App\Events\UserSentMessage,该事件在名为chat 的PrivateChannel 上广播。我还尝试向Channel 广播。我检查并通过调用控制器中的event() 助手触发了事件,它似乎没有被广播。我还尝试在提到的控制器中使用broadcast 方法。
6) 在有效的 Vue 组件中的 mountedVue 生命周期钩子中添加了以下内容(组件正在按预期呈现数据等,只是不适用于 Laravel Echo atm):
Echo.private('chat').listen('UserSentMessage', (data) => {
console.log(data);
}, (e) => {
console.log(e);
});
也试过了:
Echo.channel('chat').listen('UserSentMessage', (data) => {
console.log(data);
}, (e) => {
console.log(e);
});
Vue 组件正在成功订阅指定的频道。推送器调试控制台识别出它正在被订阅,但事件在触发时永远不会被广播。
看来是直播活动有问题。我也尝试过使用broadcast() 助手,而不是event() 助手。
此外,当通过 Echo.private() 使用 Laravel Echo 订阅活动时。它似乎在频道名称前加上private,所以我也尝试过(在事件中)广播到名为private-chat的频道。
【问题讨论】:
标签: laravel events vue.js laravel-echo