Mailable - це лист. Notification - це повідомлення, яке може піти листом, у базу, в Slack чи кудись ще, і канал вибирається окремо від змісту.
Створення:
php artisan make:notification VacancyPublished
class VacancyPublished extends Notification
{
public function __construct(public Vacancy $vacancy)
{
}
public function via(object $notifiable): array
{
return ['mail', 'database'];
}
public function toMail(object $notifiable): MailMessage
{
return (new MailMessage)
->subject('Вашу вакансію опубліковано')
->line("«{$this->vacancy->title}» тепер видно всім.")
->action('Переглянути', route('vacancies.show', $this->vacancy));
}
/**
* @return array<string, mixed>
*/
public function toArray(object $notifiable): array
{
return ['vacancy_id' => $this->vacancy->id];
}
}
Відправлення:
$user->notify(new VacancyPublished($vacancy));
// або багатьом
Notification::send($users, new VacancyPublished($vacancy));
Метод notify() доступний завдяки трейту Notifiable на моделі.
Що дає канал database: сповіщення зберігається в таблиці notifications, і з нього робиться «дзвіночок» в інтерфейсі - $user->unreadNotifications.
Коли достатньо Mailable: одноразовий лист без варіантів доставки - чек, звіт, підтвердження форми. Notification доречний, коли те саме повідомлення має йти різними каналами або користувач сам обирає, як його повідомляти.