У вас должна быть эта ошибка в ваших журналах
Symfony \ Component \ Debug \ Exception \ FatalThrowableError Аргумент 1, передаваемый в App \ Events \ PrivateMessageSent :: __ construct (), должен быть экземпляром App \Http \ Models \ Chat, экземпляр приложения \ Models \ Chat, заданный
Поскольку вы, вероятно, передаете экземпляр модели App\Models\Chat
при отправке события, но используете App\Http\Models\Chat
в классе события
Импорт правильного класса
// in PrivateMessageSent.php
namespace App\Events;
use App\Models\Chat; // <--- HERE
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class PrivateMessageSent implements ShouldBroadcast
{
Кроме того, удалите параметр wsHost
, чтобы можно было подключиться, а затем убедитесь, что транслируете частный канал с идентифицированным идентификатором пользователя
Это работает для меня
bootstrap.js
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: '*********',
cluster: 'eu',
'wsPort': 6001,
disableStats: true
});
Пример события диспетчеризации
use App\Events\PrivateMessageSent;
use App\Models\Chat;
Route::get('/', function () {
$message = Chat::create([
'receiver_id' => auth()->id()
]);
event(new PrivateMessageSent($message));
return view('welcome');
});
И такой компонент прослушивания Vue, как этот
<template>
<div></div>
</template>
<script>
export default {
props: {
user: {
type: Object,
required: true
}
},
mounted() {
Echo.private(`privatechat.${this.user.id}`).listen(
"PrivateMessageSent",
e => {
console.log("private message");
}
);
}
};
</script>
Не забудьте передать объект пользователя как реквизит или получить его с помощью ajax
<example-component :user="{{ auth()->user() }}"></example-component>
Result
Надеюсь, это поможет