Я следовал этому руководству , чтобы создать систему чата с помощью Pusher.Это работает, однако я получаю новые сообщения только от других, когда обновляю страницу, что очень раздражает.Я перепробовал множество вещей, однако ни один из них на самом деле не решил проблему.Я действительно чувствую, что это что-то очень простое, что я упустил из виду.Если бы кто-то мог мне помочь, это было бы удивительно!
Как вы видите, сообщения отправляются, пользователи могут успешно подключиться и подписаться:
.env
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MessageSent.php
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* User that sent the message
*
* @var User
*/
public $user;
/**
* Message details
*
* @var Message
*/
public $message;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user, Message $message)
{
$this->user = $user;
$this->message = $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('chat');
}
public function broadcastAs()
{
return 'MessageSent';
}
}
app.js
el: '#app',
data: {
messages: []
},
created() {
this.fetchMessages();
Echo.private('chat').listen('MessageSent', (e) => {
console.log(e);
this.sentMessages.push({
message: e.message.message,
user: e.user
});
});
},
methods: {
fetchMessages() {
axios.get('/messages').then(response => {
this.messages = response.data;
});
},
addMessage(message) {
this.messages.push(message);
axios.post('/messages', message).then(response => {
console.log(response.data);
});
}
}
});
created()
только срабатываетодин раз, когда страницы обновляются, когда я проверил это с console.log
.Кроме того, console.log в Echo.private()
вообще не достигается, делаю ли я.
ChatsController.php
{
public function __construct()
{
$this->middleware('auth');
}
/**
* Show chats
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('chat');
}
/**
* Fetch all messages
*
* @return Message
*/
public function fetchMessages()
{
return Message::with('user')->get();
}
/**
* Persist message to database
*
* @param Request $request
* @return Response
*/
public function sendMessage(Request $request)
{
$user = Auth::user();
$message = $user->messages()->create([
'message' => $request->input('message')
]);
broadcast(new MessageSent($user, $message))->toOthers();
return ['status' => 'Message Sent!'];
}
}
Также я оставил комментарий App \ Providers \ BroadcastServiceProvider в config / app.php