Laravel Notification: Полное руководство с примерами кода
В Laravel система уведомлений позволяет отправлять сообщения пользователям различными каналами: email, SMS, Slack, базы данных и другими. С помощью Laravel Notification можно быстро интегрировать уведомления в приложение и управлять их доставкой.
Что такое Laravel Notification
Notification — это механизм Laravel для отправки сообщений пользователям через разные каналы. Он поддерживает:
- Email (SMTP, Mailgun, Sendgrid)
- SMS (через сторонние сервисы)
- Slack и Telegram (через webhook)
- База данных (DB Notifications)
- Custom каналы (собственные драйверы)
Главная цель — отделить логику уведомлений от контроллеров и моделей, сделать её универсальной и расширяемой.
Создание уведомления
Для создания уведомления используется Artisan-команда:
php artisan make:notification InvoicePaid
После этого в папке app/Notifications появится файл InvoicePaid.php.
Пример уведомления по email
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class InvoicePaid extends Notification
{
use Queueable;
protected $invoice;
public function __construct($invoice)
{
$this->invoice = $invoice;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Оплата счета подтверждена')
->greeting('Здравствуйте!')
->line('Счет #' . $this->invoice->id . ' был успешно оплачен.')
->action('Просмотреть счет', url('/invoices/' . $this->invoice->id))
->line('Спасибо, что пользуетесь нашим сервисом!');
}
}
Отправка уведомления
Чтобы отправить уведомление пользователю, используйте метод notify модели User:
$user = User::find(1); $invoice = Invoice::find(101); $user->notify(new \App\Notifications\InvoicePaid($invoice));
Если нужно отправить уведомление нескольким пользователям:
$users = User::where('subscribed', true)->get();
Notification::send($users, new InvoicePaid($invoice));
Уведомления в базе данных
Для хранения уведомлений в базе данных необходимо создать таблицу notifications:
php artisan notifications:table php artisan migrate
В уведомлении добавляем метод toDatabase:
public function via($notifiable)
{
return ['database'];
}
public function toDatabase($notifiable)
{
return [
'invoice_id' => $this->invoice->id,
'amount' => $this->invoice->amount,
'message' => 'Счет успешно оплачен'
];
}
Вывод уведомлений в шаблоне Blade:
@foreach(Auth::user()->notifications as $notification)
<div>
{{ $notification->data['message'] }} — {{ $notification->created_at }}
</div>
@endforeach
Slack и другие каналы
Чтобы отправлять уведомления в Slack, добавляем метод toSlack:
use Illuminate\Notifications\Messages\SlackMessage;
public function via($notifiable)
{
return ['slack'];
}
public function toSlack($notifiable)
{
return (new SlackMessage)
->success()
->content('Счет #' . $this->invoice->id . ' оплачен');
}
Для SMS или кастомных каналов Laravel позволяет создавать свои драйверы уведомлений.
Очереди и планирование уведомлений
Чтобы уведомления не блокировали работу приложения, их можно отправлять через очереди:
php artisan queue:table php artisan migrate
В уведомлении используем трейт Queueable (уже добавлен при создании):
$user->notify((new InvoicePaid($invoice))->delay(now()->addMinutes(5)));
Laravel автоматически поместит уведомление в очередь и обработает его через worker.
FAQ — Часто задаваемые вопросы
1. Можно ли отправлять уведомления без модели User?
Да, используйте фасад Notification::route() для отправки по email или Slack без конкретного пользователя.
2. Как использовать несколько каналов одновременно?
Метод via() может возвращать массив, например ['mail', 'database', 'slack'].
3. Где хранится текст уведомления в базе данных?
В таблице notifications поле data хранит JSON с содержимым уведомления.
4. Можно ли кастомизировать очередь уведомлений?
Да, в уведомлении можно определить свой $queue и подключить отдельный worker для обработки.
5. Как увидеть непрочитанные уведомления?
В Blade-шаблоне: Auth::user()->unreadNotifications возвращает коллекцию непрочитанных уведомлений.
Вывод
Система уведомлений Laravel позволяет гибко отправлять сообщения пользователям через различные каналы. Она поддерживает очереди, хранение в базе данных, интеграцию с внешними сервисами и полностью управляется через объектно-ориентированный подход. Правильная настройка Notification повышает UX приложения и упрощает коммуникацию с пользователями.
Комментарии (0)
Оставить комментарий