Как сделать свой вид письма при сбросе пароля в Laravel
Доброго времени суток. Очень часто нам необходимо изменить сообщение, которое получает пользователь при сбросе пароля на сайте, использующем Laravel. Или как поменять верстку письма. Или сделать перевод. В данной статье мы рассмотрим, как это реализовать.
Шаг 1. Переопределим метод sendPasswordResetNotification
Переходим в модель User. Это модель связывает нас с таблицей users, в которой хранятся данные пользователей. У вас может быть другая модель. Но по умолчанию в Laravel это User. Как сделать авторизацию из другой таблицы вы можете прочитать в статье «Авторизация в Laravel 5.3 из нескольких таблиц»
public function sendPasswordResetNotification($token) { $this->notify(new ResetPasswordNotification($token)); }
И не забываем импортировать уведомление.
use App\Notifications\ResetPassword as ResetPasswordNotification;
Шаг 2. Создание уведомления
Для того, чтобы создать уведомление используем команду
php artisan make:notification ResetPasswordNotification
Открываем только, что созданный файл ResetPasswordNotification, который расположен App/Notifications
И редактируем метод toMail, т.к. мы хотим отправлять email уведомление.
public function toMail($notifiable) { $subject = 'Восстановление пароля'; return (new Mailable($this->token, $notifiable))->subject($subject)->to($notifiable->email); }
Не забываем импортировать:
use App\Mail\ResetPassword as Mailable;
Об уведомлениях можно прочитать тут.
Шаг 3. Создание Mailable.
Теперь нам необходимо создать класс Mailable ResetPassword. Для этого используем artisan команду:
php artisan make:mail ResetPassword
После будет создан наш класс, который описан в App\Mail\ResetPassword.php
Открываем этот файл и первое, что нам необходимо сделать это передать токен и уведомление. Для этого добавляем два свойства:
protected $token; protected $notifiable;
И изменяем метод __construct()
public function __construct($token, $notifiable) { $this->token = $token; $this->notifiable = $notifiable; }
Дальше изменяем метод build, который и отвечает за отправление email сообщений. Более подробно об классе Mailable вы можете прочитать в документации по Laravel.
public function build() { return $this->markdown('emails.reset_password_notification', [ 'url' => url(config('app.url').route('password.reset', $this->token, false)), 'name' => $this->notifiable->name, ]); }
Отлично. Осталось только добавить шаблон нашего email сообщения.
Шаг 4. Создание шаблона email сообщения
Шаблоны email сообщений находятся в каталоге resources/view/emails. А наш шаблон будет называться reset_password_notification. Это мы определили в методе build.
Создаем файл reset_password_notification.blade.php в каталоге resources/view/emails. И добавляем в него следующий код:
Для смены пароля перейдите по следующей ссылке <a href="{{ $url }}">{{ $url }}</a>
В данный файл вы можете добавить любой html код, необходимый для верстки вашего email сообщения.
Более подробно о шаблонах Laravel вы можете почитать в официальной документации.
Вот и все.
Вывод.
Мы с вами изменили шаблон email сообщения. Таким образом вы можете менять представления для email сообщений в зависимости от различных условий, например, от языка приложения.