Laravel + Pusher 预期参数 2 是一个数组,在实时聊天中给出的字符串

问题描述

我一直在关注这个 blog post 由 pusher 在他们的官方网站上使用 laravel + pusher 构建基本的聊天应用程序。

我已经根据博客彻底遵循了每一步,我会到处搜索,因为那里没有提到一些细节。

我可以在用户之间发送消息(保存在数据库表中)但不能在用户端实时更新。

以下是我按下发送消息按钮时收到的错误消息:

enter image description here

这是我编写的代码文件中的片段。

事件/MessageSent.PHP

use App\User;
use App\Message;
class MessageSent implements Shouldbroadcast
{
  use dispatchable,InteractsWithSockets,SerializesModels;
  public $user;
  public $message;

 public function __construct(User $user,Message $message)
 {
    $this->message = $message;
    $this->user = $user;
 }

 public function broadcastOn()
 {
    return new PrivateChannel('chat');
 }
}

broutes/channels.PHP

broadcast::channel('chat',function ($user) {
  return Auth::check();
});

web.PHP

Auth::routes();
Route::get('/','ChatsController@index');
Route::get('messages','ChatsController@fetchMessages');
Route::post('messages','ChatsController@sendMessage');

ChatsController.PHP

use App\Events\MessageSent;
use App\Message;
use Illuminate\Http\Request;
use Auth;
class ChatsController extends Controller
{
  public function __construct()
  {
    $this->middleware('auth');
  }

  public function index()
  {
    return view('chat');
  }

  public function fetchMessages()
  {
    return Message::with('user')->get();
  }

  public function sendMessage(Request $request)
  {
    $user = Auth::user();

    $message = $user->messages()->create([
        'message' => $request->message,]);

    broadcast(new MessageSent($user,$message))->toOthers();
    
    return ['status' => 'Message Sent!'];
  }
}

我使用的是 Laravel 5.5 版,pusher 6.1。

这篇博文是为 laravel 5.4 和 pusher 2.6 编写的。

是版本差异导致了这个问题吗? 感谢您的帮助。

解决方法

解决办法是降级pusher版本。

composer require pusher/pusher-php-server ^4.1

仍会为最新版本寻找合适的答案。