Конфигурация эхо-сигнала Laravel Livewire

#laravel #events #echo #pusher #laravel-livewire

#laravel #Мероприятия #эхо #толкатель #laravel-livewire

Вопрос:

Я настроил систему уведомлений с помощью Pusher и Echo в своем приложении Laravel 8. Это работает нормально, я могу получить событие уведомления в VanillaJS с

 window.Echo.private('App.Models.User.'   User.id)
.notification((notification) => {
    if (notification.type === 'App\Notifications\JobLiked') {
        let count = document.getElementById('count');
        let number = count.innerHTML;
        number  ;
        count.innerHTML = number;
    }
});
  

Но теперь я хочу использовать прослушиватели Livewire для запуска моей функции, затем я настраиваю :

 public function getListeners()
{
    return [
        "echo-private:App.Models.User.{$this->authId},NotificationSent" => 'notifyNewJobLiked',
    ];
}
  

Но, похоже, ничего не работает, и у меня нет сообщения об ошибке.. есть ли у вас какие-либо подсказки, что может произойти?

Большое вам спасибо! 🙂

Ответ №1:

Попробуйте настроить прослушиватель со следующим конкретным именем события:

 public function getListeners()
{
    return [
        "echo-private:App.Models.User.{$this->authId},.Illuminate\Notifications\Events\BroadcastNotificationCreated" => 'notifyNewJobLiked',
    ];
}
  

Поскольку вы используете уведомления Laravel для запуска широковещательной передачи вместо события, подлежащего трансляции, по умолчанию используется имя события при запуске Illuminate\Notifications\Events\BroadcastNotificationCreated .

В Echo есть два метода прослушивания входящих сообщений: notification и listen . Причина, по которой он работает с вашим ванильным js, заключается в том, что вы используете notification метод, тогда как прослушиватель событий livewire работает только с Echo listen , который ожидает имя вызывающего события.

Если вы используете pusher, вы можете увидеть имя вызывающего события в консоли отладки pusher.

Также позаботьтесь и добавьте точку перед событием с пространством имен, как описано в документации.

Ответ №2:

Правильный способ получения эхо-уведомлений в livewire:

 public function getListeners()
    {
        $user_id = auth()->user()->id;

        return [
            "echo-notification:App.Models.User.{$user_id}, notification" => 'gotNotification'
        ];
    }
  

Как вы можете видеть, тип канала — уведомление, а не частный:

эхо-уведомление

Также не забудьте иметь запись, подтверждающую подлинность пользователей в вашем маршруте каналов, так же, как и для частного канала:

 Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});
  

Еще одна вещь, которую я узнал, это то, что вы можете получить данные канала уведомлений из возвращаемого поля.
Итак, вы можете сделать:

 public function gotNotification($notification)
{
    
}