Метод toMail
Метод toMail применяется в классе уведомления
для формирования email-сообщения, которое будет отправлено
получателю. Метод получает экземпляр Notifiable
в качестве параметра и должен возвращать объект
MailMessage, содержащий тему, приветствие,
текст и другие элементы письма. Если метод не определён,
уведомление не сможет быть отправлено по email.
Синтаксис
<?php
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class CustomNotification extends Notification
{
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Subject')
->greeting('Hello!')
->line('Message text');
}
}
?>
Пример
Давайте создадим уведомление о регистрации нового пользователя и определим для него email-письмо с приветствием:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class RegistrationNotification extends Notification
{
use Queueable;
public function __construct()
{
//
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Welcome to our site')
->greeting('Hello ' . $notifiable->name . '!')
->line('Thank you for registering on our website.')
->line('We are glad to see you!')
->action('Visit site', url('/'))
->salutation('Best regards');
}
}
?>
Пример
Отправим созданное уведомление пользователю с помощью метода
notify модели User:
<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Notifications\RegistrationNotification;
class UserController extends Controller
{
public function register()
{
$user = User::find(1);
$user->notify(new RegistrationNotification());
return response()->json(['message' => 'Notification sent']);
}
}
?>
Пример
Создадим уведомление о сбросе пароля с кастомным оформлением и ссылкой для восстановления:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class ResetPasswordNotification extends Notification
{
use Queueable;
protected $token;
public function __construct($token)
{
$this->token = $token;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
$resetUrl = url('/password/reset/' . $this->token);
return (new MailMessage)
->subject('Reset password')
->greeting('Hello!')
->line('You are receiving this email because we received a password reset request for your account.')
->action('Reset password', $resetUrl)
->line('If you did not request a password reset, no further action is required.')
->error()
->salutation('Regards');
}
}
?>
Пример
Используем метод toMail для отправки уведомления
с пользовательским Blade-шаблоном:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class CustomTemplateNotification extends Notification
{
use Queueable;
protected $data;
public function __construct($data)
{
$this->data = $data;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Custom notification')
->view('emails.custom', ['data' => $this->data]);
}
}
?>
Пример Blade-шаблона для письма:
<div style="padding: 20px;">
<h1>Custom notification</h1>
<p>Data: {{ $data }}</p>
<p>Thank you for using our service!</p>
</div>
Результат выполнения кода при отправке уведомления:
"Notification sent"
Смотрите также
-
метод
via,
который определяет каналы доставки уведомления -
метод
toArray,
который формирует массив данных для уведомления -
метод
toDatabase,
который определяет данные для базы данных -
метод
notify,
который отправляет уведомление пользователю