В Laravel 5.3 появилась новая функция, позволяющая отправлять уведомления через такие сервисы, как Slack, а так же через SMS, электронную почту и другими способами.
Так давайте же посмотрим, как легко создать и отправить уведомление, используя эту новую функцию:
php artisan make:notification NewPost
Это позволит создать новый класс
Используя метод
Поддерживаемые каналы:
Система уведомлений будет автоматически искать свойство
Вы можете установить глобальный номер
Так давайте же посмотрим, как легко создать и отправить уведомление, используя эту новую функцию:
class NewPost extends \Illuminate\Notifications\Notification
{
public function __construct($post)
{
$this->post = $post;
}
public function via($notifiable)
{
return ['database'];
}
public function toArray($notifiable)
{
return [
'message' => 'Новый пост в блоге',
'action' => url($this->post->slug)
];
}
}
Всё, что вам нужно сделать, чтобы отправить уведомление выбранному пользователю:$user->notify(new NewPost($post));
Создание уведомлений
Laravel 5.3 поставляется с новой консольной командой для создания уведомлений:php artisan make:notification NewPost
Это позволит создать новый класс
app/Notification
, каждый класс уведомлений содержит метод via()
, а также методы для построения уведомлений в различных каналах.Используя метод
via()
можно указать каналы, через которые вы бы хотели направить уведомление. Давайте проверим пример из официальной документации:public function via($notifiable)
{
return $notifiable->prefers_sms ? ['sms'] : ['mail', 'database'];
}
Метод via получает экземпляр $notifiable, который является моделью отправленного уведомления. В большинстве случаев будет использована модель пользователя, хотя функционал этим не ограничивается.Поддерживаемые каналы:
mail, nexmo, database, broadcast
и slack
.Форматирование уведомлений по Email
Вы можете отформатировать, каким образом уведомления будут отправляться по различным каналам, например, давайте взглянем на форматирование уведомления по электронной почте:public function toMail($notifiable)
{
return (new MailMessage)
->subject('Новый пост!')
->line('Новый пост опубликован в моем блоге!')
->action('Читать', url($this->post->slug))
->line('Пожалуйста, не забывайте поделиться с друзьями.');
}
Это позволит создать сообщение, используя гибкий шаблон из коробки, который можно публиковать с помощью консольной команды vendor:publish
.Система уведомлений будет автоматически искать свойство
email
в вашей модели, однако, вы можете настроить это поведение, определив метод routeNotificationForMail
в вашей модели, возвращающий адрес электронной почты.public function routeNotificationForMail()
{
return $this->email_address;
}
Форматирование SMS уведомлений Nexmo
Так же, как и в случае уведомлений по электронной почте, вам необходимо определить методtoNexmo
в классе уведомлений:public function toNexmo($notifiable)
{
return (new NexmoMessage)
->from(123456789)
->content('Новый пост в моем блоге!');
}
В случае уведомлений Nexmo, Laravel будет искать свойство номера телефона в модели. Вы можете переопределить это методом routeNotificationForNexmo
.Вы можете установить глобальный номер
from
в файле конфигурации Nexmo, таким образом, вам не нужно будет использовать номер from
в каждом уведомлении.Форматирование уведомлений базы данных
Форматирование уведомлений базы данных вы можете определить в методеtoDatabase
:public function toDatabase($notifiable)
{
return new DatabaseMessage([
'message' => 'Новый пост опубликован в блоге!',
'action' => url($this->post->slug)
]);
}
Что бы начать использовать канал базы данных, прочитайте полную документацию на официальном сайте.Отправка уведомлений
Вы можете отправлять уведомления, используя методnotify()
в вашей модели, этот метод существует в трейте Notifiable
, который вам нужно добавить к вашей модели.$user->notify(new NewPost($post));
Вы также можете использовать фасад Notification, это позволит вам отправлять уведомления нескольким уведомляемым пользователям одновременно:Notification::send(User::all(), new NewPost($post));
Очередь уведомлений
Вы можете легко создавать очереди отправки уведомлений с помощью интерфейсаShouldQueue
:<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
class NewPost extends Notification implements ShouldQueue
{
use Queueable;
}
Оригинальная статья