Laravel のパスワードリセットPassword::sendResetLink
を利用してパスワードリセットメールを送信する機能でメールをカスタマイズする方法です。
パスワードリンク送信処理
Authenticatableを適用したUserモデルにsendPasswordResetNotificationメソッド追加し、 Password::sendResetLink で処理するsendPasswordResetNotificationをオーバーライドします。
use App\Notifications\CustomPasswordResetNotification;
class User extends Authenticatable
{
use Notifiable;
・・・
public function sendPasswordResetNotification($token)
{
$this->notify(new CustomPasswordResetNotification($token));
}
}
これでPassword::sendResetLinkを実行するとCustomPasswordResetNotificationの内容でメールが送信されます。
use Illuminate\Support\Facades\Password;
・・・
$status = Password::sendResetLink(['email' => $email]);
メールのカスタマイズ
CustomPasswordResetNotificationの作成例です。
php artisan make:notification CustomPasswordResetNotification
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Lang;
class CustomPasswordResetNotification extends Notification
{
public $token;
public function __construct($token)
{
$this->token = $token;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject(Lang::get('パスワードのリセット'))
->action(Lang::get('パスワードリセット'), url(config('app.url').route('password.reset', ['token' => $this->token, 'email' => $notifiable->getEmailForPasswordReset()], false)))
->line(Lang::get('リンクの有効期限は :count 分です.', ['count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')]))
}
}