在Laravel上更改密码重置的电子邮件视图路径

时间:2016-03-26 22:33:09

标签: php email laravel passwords

使用Laravel 5,我需要2个不同的密码重置电子邮件视图。电子邮件视图的默认路径为 emails.password 。但在某些情况下,我想发送 emails.password_alternative

我该怎么做? (使用Laravel的PasswordBroker)

这是我目前的代码:

public function __construct(Guard $auth, PasswordBroker $passwords)
{
    $this->auth = $auth;
    $this->passwords = $passwords;
}

public function sendReset(PasswordResetRequest $request)
{
    //HERE : If something, use another email view instead of the default one from the config file
    $response = $this->passwords->sendResetLink($request->only('email'), function($m)
    {
        $m->subject($this->getEmailSubject());
    });
}

2 个答案:

答案 0 :(得分:7)

对于对Laravel 5.2感兴趣的任何人,您可以通过添加

设置自定义html和文本电子邮件视图以重置密码
config(['auth.passwords.users.email' => ['auth.emails.password.html', 'auth.emails.password.text']]);

到中间件调用之前的构造函数中的PasswordController.php。

这会覆盖PasswordBroker的app / config / auth.php设置。

密码重置电子邮件的刀片模板位于:

  

命名为yourprojectname /资源/视图/ AUTH /电子邮件/密码/ html.blade.php   命名为yourprojectname /资源/视图/ AUTH /电子邮件/密码/ text.blade.php

花了我足够长的时间。

现金: http://ericlbarnes.com/2015/10/14/how-to-send-both-html-and-plain-text-password-reset-emails-in-laravel-5-1/ http://academe.co.uk/2014/01/laravel-multipart-registration-and-reminder-emails/

答案 1 :(得分:4)

使用PasswordBroker并基于Illuminate/Auth/Passwords/PasswordBroker.php类,$emailView是受保护的变量,因此在实例化类后,您无法更改该值。

但是,您有几个解决方案:

  1. 您可以创建自己的类来扩展PasswordBroker并使用它。

    class MyPasswordBroker extends PasswordBroker {
        public function setEmailView($view) {
            $this->emailView = $view;
        }
    }
    
    // (...)
    
    public function __construct(Guard $auth, MyPasswordBroker $passwords)
    {
        $this->auth = $auth;
        $this->passwords = $passwords;
    }
    
    public function sendReset(PasswordResetRequest $request)
    {
        if ($someConditionHere) {
            $this->passwords->setEmailView('emails.password_alternative');
        }
        $response = $this->passwords->sendResetLink($request->only('email'), function($m)
        {
            $m->subject($this->getEmailSubject());
        });
    }
    
  2. 您可以在方法中创建PasswordBroker,而无需使用依赖注入。

    public function sendReset(PasswordResetRequest $request)
    {
        $emailView = 'emails.password';
    
        if ($someConditionHere) {
            $emailView = 'emails.password_alternative';
        }
    
        $passwords = new PasswordBroker(
            App::make('TokenRepositoryInterface'),
            App::make('UserProvider'),
            App::make('MailerContract'),
            $emailView
        );
    
        $response = $passwords->sendResetLink($request->only('email'), function($m)
        {
            $m->subject($this->getEmailSubject());
        });
    }
    

    这是一个更丑陋的解决方案,如果你有自动化测试,这将是一个痛苦的工作。

  3. 免责声明:我没有测试过任何此类代码。