#laravel #pusher
Вопрос:
Я собираюсь опубликовать все свои методы в своем приложении, просто чтобы мне было понятно, что я читаю. Вот в чем цель. Когда пользователь входит в комнату, добавляется сообщение «ПОЛЬЗОВАТЕЛЬ ВОШЕЛ В КОМНАТУ» — это работает нормально. Теперь я хочу, чтобы, когда пользователь ПОКИДАЕТ комнату, я хотел, чтобы он сказал «ПОЛЬЗОВАТЕЛЬ ПОКИНУЛ КОМНАТУ» — уведомление работает, но оно показывает неправильное имя пользователя (оно показывает имя пользователя, который ВИДИТ сообщение.
Чего мне не хватает или чего я не понимаю
methods: {
connect() {
if (this.currentRoom?.id) {
let vm = this;
this.getMessages();
Echo.join("chat." this.currentRoom.id)
.here(users => {
this.sendUserActivityNotification(this.$page.props.user, true)
this.users = users
this.usersCount = users.length
})
.joining(user => {
this.users.push(user)
this.usersCount = this.usersCount 1
})
.leaving(user => {
this.sendUserActivityNotification(this.$page.props.user, false)
this.users = this.users.filter(({id}) => (id !== user.id))
this.usersCount = this.usersCount-1
})
.listen('NewChatMessage', (e) => {
vm.getMessages();
});
}
},
setRoom(room) {
this.currentRoom = room;
},
getMessages() {
axios.get('/chat/room/' this.currentRoom.id '/messages')
.then(response => {
this.messages = response.data;
})
.catch(error => {
console.log(error);
})
},
sendUserActivityNotification(user, joining) {
const message = `${user.name} has ${joining === true ? 'entered' : 'left'} the room.`
return axios.post(`/chat/room/${this.currentRoom.id}/notifications`, {message}).then(() => this.getMessages())
.catch(console.error)
},
leaveRoom({id}) {
this.$store.dispatch(RoomTypes.LEAVE_ROOM, id)
}
},
Ответ №1:
Я не использовал Laravel Echo, но после прочтения вашего кода я думаю, что при leaving
вызове метода вы передаете текущего пользователя вместо того, что вы получаете от события при вызове sendUserActivityNotification
метода.
Ваша реализация выглядит так:
...
.leaving(user => {
this.sendUserActivityNotification(this.$page.props.user, false)
this.users = this.users.filter(({id}) => (id !== user.id))
this.usersCount = this.usersCount-1
})
....
Вы переходите this.$page.props.user
к this.sendUserActivityNotification
методу вместо передачи user
.
Вы должны изменить этот вызов на this.sendUserActivityNotification(user, false)