РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
841 of 1392 menu

Метод toBroadcast

Метод toBroadcast определяется внутри класса уведомления и указывает, какие данные должны быть отправлены через канал трансляции (broadcast). Метод принимает экземпляр Notifiable (обычно модель пользователя) и должен возвращать массив данных, который будет передан в событие трансляции. Этот метод используется только если канал broadcast указан в методе via.

Синтаксис

<?php public function toBroadcast($notifiable) { return [ 'data' => [ 'key' => 'value', ], ]; } ?>

Метод может возвращать массив с ключом 'data', содержащим основные данные уведомления. Если ключ 'data' не указан, весь массив будет использован как данные.

Пример

Давайте создадим уведомление для трансляции информации о новом комментарии:

<?php namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Queue\ShouldQueue; class CommentNotification extends Notification implements ShouldQueue { use Queueable; protected $comment; protected $user; public function __construct($comment, $user) { $this->comment = $comment; $this->user = $user; } public function via($notifiable) { return ['broadcast', 'database']; } public function toBroadcast($notifiable) { return [ 'data' => [ 'comment_id' => $this->comment->id, 'user_name' => $this->user->name, 'comment_text' => $this->comment->text, 'created_at' => now()->toDateTimeString(), ], ]; } } ?>

Теперь отправим это уведомление пользователю:

<?php namespace App\Http\Controllers; use App\Models\User; use App\Models\Comment; use App\Notifications\CommentNotification; use Illuminate\Http\Request; class CommentController extends Controller { public function store(Request $request) { $comment = Comment::create($request->all()); $user = User::find(1); $user->notify(new CommentNotification($comment, auth()->user())); return response()->json(['status' => 'success']); } } ?>

Пример

Метод toBroadcast также может возвращать дополнительные параметры трансляции с ключом 'broadcast', например, для указания кастомного события:

<?php namespace App\Notifications; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Events\Dispatcher; class StatusNotification extends Notification { protected $status; public function __construct($status) { $this->status = $status; } public function via($notifiable) { return ['broadcast']; } public function toBroadcast($notifiable) { return [ 'data' => [ 'status' => $this->status, 'user_id' => $notifiable->id, ], 'broadcast' => [ 'event' => 'App\Events\StatusUpdated', ], ]; } } ?>

Результат отправки уведомления:

"Notification sent and broadcasted"

Пример

Для обработки трансляции на клиентской стороне используйте Laravel Echo:

<script> import Echo from 'laravel-echo'; import Pusher from 'pusher-js'; window.Pusher = Pusher; const echo = new Echo({ broadcaster: 'pusher', key: 'your-key', cluster: 'mt1', wsHost: 'ws-mt1.pusher.com', wsPort: 80, }); echo.private('App.Models.User.' + userId) .notification((notification) => { console.log('Notification received:', notification); // Здесь можно отобразить уведомление в интерфейсе }); </script>

Результат выполнения кода в браузере:

<div>Notification received: { "comment_id": 1, "user_name": "John", "comment_text": "Hello world!", "created_at": "2024-01-15 12:30:00" }</div>

Смотрите также

  • метод via,
    который определяет каналы доставки уведомления
  • метод notify,
    который отправляет уведомление модели
  • класс Notification,
    базовый класс для создания уведомлений
  • метод toArray,
    который определяет данные для базы данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить