Laravel 9中使用laravel/ui替换自定义密码重置与邮箱确认邮件模板
当然可以替换成自定义的Blade模板,以下是具体实现步骤:
方法一:发布默认模板后修改
Laravel 默认把认证相关的邮件视图放在框架内部目录,你可以先将这些模板发布到项目的resources/views目录下,再进行自定义修改:
发布邮件模板
执行以下命令,将Laravel自带的邮件模板同步到项目本地:php artisan vendor:publish --tag=laravel-mail php artisan vendor:publish --tag=laravel-notifications执行完成后,你会在
resources/views/vendor/mail看到邮件基础布局模板,认证相关的模板会出现在resources/views/auth目录下(比如密码重置的passwords/reset.blade.php、邮箱验证的verify.blade.php)。自定义模板内容
直接编辑上述目录下的Blade文件,按需调整HTML结构、样式、文案即可。修改后,系统会自动使用这些自定义模板发送邮件。
方法二:完全自定义模板(更灵活)
如果不想依赖默认模板结构,可以完全创建独立的Blade文件,再修改对应的通知类指定使用新模板:
1. 创建自定义Blade模板
在resources/views目录下新建模板文件,比如:
- 密码重置模板:
resources/views/emails/password-reset.blade.php - 邮箱确认模板:
resources/views/emails/verify-email.blade.php
模板中需要使用通知类传递的核心变量:
- 密码重置模板需用
$url(重置链接) - 邮箱确认模板需用
$verificationUrl(验证链接)
示例自定义密码重置模板片段:
<!DOCTYPE html> <html> <head> <title>重置你的密码</title> </head> <body> <h1>你好,{{ $notifiable->name }}</h1> <p>点击下方链接重置你的密码:</p> <a href="{{ $url }}">重置密码</a> <p>若不是你发起的请求,请忽略此邮件。</p> </body> </html>
2. 重写Auth通知类
Laravel的认证通知(密码重置、邮箱确认)通过通知类实现,你需要创建自定义通知类替换默认类:
自定义密码重置通知类
在app/Notifications目录下创建CustomPasswordReset.php:
<?php namespace App\Notifications; use Illuminate\Auth\Notifications\ResetPassword as ResetPasswordNotification; use Illuminate\Notifications\Messages\MailMessage; class CustomPasswordReset extends ResetPasswordNotification { public function toMail($notifiable) { $resetUrl = $this->resetUrl($notifiable); return (new MailMessage) ->subject('自定义密码重置邮件') ->view( 'emails.password-reset', // 指定自定义模板路径 ['url' => $resetUrl, 'notifiable' => $notifiable] ); } }
自定义邮箱确认通知类
在app/Notifications目录下创建CustomVerifyEmail.php:
<?php namespace App\Notifications; use Illuminate\Auth\Notifications\VerifyEmail as VerifyEmailNotification; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Support\Facades\Lang; class CustomVerifyEmail extends VerifyEmailNotification { public function toMail($notifiable) { $verificationUrl = $this->verificationUrl($notifiable); if (static::$toMailCallback) { return call_user_func(static::$toMailCallback, $notifiable, $verificationUrl); } return (new MailMessage) ->subject(Lang::get('自定义邮箱验证')) ->view( 'emails.verify-email', // 指定自定义模板路径 ['verificationUrl' => $verificationUrl, 'notifiable' => $notifiable] ); } }
3. 在User模型中替换通知类
打开app/Models/User.php,添加或修改以下方法,指定使用自定义通知类:
<?php namespace App\Models; use App\Notifications\CustomPasswordReset; use App\Notifications\CustomVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use Notifiable; // ... 其他原有代码 /** * 发送密码重置通知 * * @param string $token * @return void */ public function sendPasswordResetNotification($token) { $this->notify(new CustomPasswordReset($token)); } /** * 发送邮箱验证通知 * * @return void */ public function sendEmailVerificationNotification() { $this->notify(new CustomVerifyEmail); } }
完成以上设置后,系统发送密码重置和邮箱确认邮件时,就会自动使用你自定义的Blade模板。
内容的提问来源于stack exchange,提问作者dev_2108

