【问题标题】:Customizing password reset mail View in Laravel在 Laravel 中自定义密码重置邮件视图
【发布时间】:2015-08-10 11:55:01
【问题描述】:

如何更改 laravel 中密码重置邮件中显示的内容? 就像用他的名字称呼用户并显示密码重置链接等。 该电子邮件视图位于何处?

【问题讨论】:

    标签: email laravel


    【解决方案1】:

    是的,您可以更改电子邮件模板,该模板位于

     resources/views/emails/password.blade.php.
    

    对于自定义,将用户模型的实例传递给此视图并在此处回显用户名,例如:

    Hello, {{$user->username}}
    //And Body of Reset link goes here
    

    更新 laravel 5.3+

    在更新的 laravel 版本中,代码结构进行了改进。 密码重置邮件现在位于 vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php

    及其对应的模板位于: resources/views/vendor/notifications/email.blade.php

    因此,为了自定义它,您可能需要:

    • 将其复制到应用目录中的某个位置。
    • 设置正确的命名空间来引用它。
    • 向用户类添加新方法并将其引用到新复制的类
    • 自定义。

    【讨论】:

    • 但我如何告诉通知(或至少重置电子邮件通知)使用该模板?
    • @FranciscoCorralesMorales 您可能正在使用 Laravel 5.3,因此请查看我的新答案以了解更改邮件内容的正确方法。
    • 目前还不清楚是否真正更改模板,即使用自定义模板(当然是外部供应商)
    【解决方案2】:

    在 Laravel 5.3 中,他们更改了整个密码重置代码,因此给定的答案不再有效。

    如果您想更改基本文本,您应该将 vendor/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php 复制到您自己的应用程序中的某个位置(例如 app/Notifications/ResetPassword.php),设置正确的名称空间并根据需要更改文本。 (不要更改原始的 ResetPassword.php,因为更改供应商文件夹中的文件是不好的做法!)

    然后在 User 类中添加一个sendPasswordResetNotification 方法,并确保引用了适当的 ResetPassword 类:

    use App\Notifications\ResetPassword;
    
    ...
    
    public function sendPasswordResetNotification($token) {
        $this->notify(new ResetPassword($token));
    }
    

    如果您想更改邮件模板的其余部分(也用于所有其他邮件),请执行以下操作:

    运行php artisan vendor:publish

    这会将一些刀片从供应商文件夹复制到资源/视图/供应商 resources/views/vendor/notifications/email.blade.php 是您要更改的。

    希望这对陷入 Laravel 5.3 的人有所帮助

    【讨论】:

    • 我们如何在新的通知电子邮件视图模板中访问 $user 对象假设我们想要用户全名,如果我这样做 {{$user->fullname}} 它给了我错误。
    • 在 ResetPassword 类中,用户被赋予 toMail 函数(在本例中为 $notifiable 的名称):public function toMail($notifiable) { ... $notifiable->fullname ... } 根据您的具体实现,您应该能够从那里实现它您的邮件模板。可能看起来像这样:$MailMessage->greeting(trans('mail.passResetGreeting', ['name' => $notifiable->fullname]) );
    • 很好的答案,谢谢。但是,我不建议发布完整的供应商目录。只需要通知,所以试试php artisan vendor:publish --tag=laravel-notifications
    • 在供应商文件中更改视图似乎没有意义
    • @IceFire 不知道你为什么投反对票; php artisan vendor:publish 会将文件从供应商中取出并放入您自己的代码中,因此您实际上并没有更改供应商文件中的内容。这就是 Laravel 的预期工作方式。
    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多