В реальных проектах пользователи любят получать уведомления обо всем: пароль сбросил, заказ отправлен, кто-то лайкнул пост. Laravel умеет это делать почти «из коробки», но важно понимать, как это организовать, чтобы не превратить проект в спагетти.

Создание уведомления

В Laravel уведомление создается командой Artisan:

php artisan make:notification ResetPasswordNotification

Laravel создаст класс в app/Notifications.

Настройка уведомления

В классе уведомления нужно указать, через какие каналы оно будет отправляться (via) и как именно (toMail, toDatabase и т.д.):

public function via($notifiable)
{
    return ['mail'];
}

public function toMail($notifiable)
{
    return (new MailMessage)
                ->line('Мы получили запрос на сброс пароля для вашего аккаунта.')
                ->action('Сбросить пароль', url(config('app.url').route('password.reset', $this->token, false)))
                ->line('Если вы не запрашивали сброс пароля, ничего делать не нужно.');
}

Тут никаких сложностей — указываешь канал и формат уведомления.

Отправка уведомления

Чтобы отправить уведомление пользователю:

$user->notify(new ResetPasswordNotification($token));

Просто, и при этом Laravel сам решает, через какой канал доставлять уведомление.

Каналы уведомлений

Laravel из коробки поддерживает:

  • Mail — письма на почту
  • Database — хранение уведомлений в базе
  • Broadcast — веб-сокеты для реального времени
  • Nexmo — SMS

Если нужно что-то нестандартное, можно создать свой канал.

Создание собственного канала

Если стандартных каналов мало, создаешь свой:

  • Создаешь класс канала.
  • Реализуешь интерфейс Illuminate\Contracts\Notifications\Notification.
  • Пишешь метод send, где описываешь, как доставлять уведомление.

Так можно интегрировать любой сервис: Telegram, Slack, свой внутренний API — что угодно.

Заключение

Уведомления в Laravel — это инструмент для того, чтобы не плодить костыли при оповещении пользователей. Главное — держать их в одном месте, использовать каналы и отделять логику отправки от бизнес-логики приложения. Делай уведомления правильно, и не придется потом вырезать все костыли и переделывать проект.