bl4*_*sta 5 php laravel pusher laravel-echo
我正在尝试使用 Laravel 和 Vue JS 实现一个通知系统。我实现了一切,它需要工作,但通知类没有广播。
.env 文件
BROADCAST_DRIVER=pusher
PUSHER_APP_ID=40xxxx
PUSHER_KEY=5a6axxxxxx
PUSHER_SECRET=b35xxxxxx
Run Code Online (Sandbox Code Playgroud)
已经运行以下命令:
npm install --save laravel-echo pusher-js
composer require pusher/pusher-php-server "~2.6"
Run Code Online (Sandbox Code Playgroud)
在 app.js 中(未注释)
App\Providers\BroadcastServiceProvider::class,
Run Code Online (Sandbox Code Playgroud)
广播服务提供商.php
Broadcast::channel('App.User.*', function ($user, $userID) {
return (int) $user->id === (int) $userID;
});
Run Code Online (Sandbox Code Playgroud)
bootstrap.js
import Echo from "laravel-echo"
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: '5a6axxxxxx',
cluster: 'eu',
encrypted: true,
authEndpoint: "/broadcasting/auth"
});
window.Pusher.log = function(message){
window.console.log(message);
}
window.Echo.private('App.User.1')
.notification((notification) => {
console.log(notification.type);
});
Run Code Online (Sandbox Code Playgroud)
Laravel 日志中没有错误。与此同时,我正在检查 Pusher 的调试控制台上仅连接和断开连接的请求。为什么它没有推送任何类型的错误以及为什么它不能正常工作?
小智 4
我有同样的问题。User就我而言,问题的原因是按名称空间放置模型App\Models\User。解决这个问题的第一个方法是:
在BroadcastServiceProvider.php或routes/channels.php中(如果laravel 5.7+)
Broadcast::channel('App.Models.User.*', function ($user, $userID) {
return (int) $user->id === (int) $userID;
});
Run Code Online (Sandbox Code Playgroud)
解决这个问题的第二种方法是:
在User模型中添加方法
public function receivesBroadcastNotificationsOn() {
return 'users.'.$this->id;
}
Run Code Online (Sandbox Code Playgroud)
并在 BroadcastServiceProvider.php 或 paths/channels.php 中(如果 laravel 5.7+)
Broadcast::channel('users.{user_id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
Run Code Online (Sandbox Code Playgroud)