0

Laravel 5.3 を使用し、パスワード リセット メール テンプレートをカスタマイズしています。カスタム Mailable クラスを使用して通知用の独自の HTML メールを作成するために、次の変更を行いました。これまでの私の進捗状況は次のとおりです。

ForgotPasswordController:

public function postEmail(Request $request)
    {
        $this->validate($request, ['email' => 'required|email']);

        $response = Password::sendResetLink($request->only('email'), function (Message $message) {
            $message->subject($this->getEmailSubject());
        });

        switch ($response) {
            case Password::RESET_LINK_SENT:
                return Response::json(['status' => trans($response)], 200);

            case Password::INVALID_USER:
                return Response::json(['email' => trans($response)], 400);
        }
    }

ユーザー モデル:

public function sendPasswordResetNotification($token)
{
    Mail::queue(new ResetPassword($token));
}

ResetPassword メール可能クラス:

protected $token;

public function __construct($token)
{
    $this->token = $token;
}

public function build()
{
    $userEmail = 'something'; // How to add User Email??
    $userName = 'Donald Trump'; // How to find out User's Name??
    $subject = 'Password Reset';

    return $this->view('emails.password')
                ->to($userEmail)
                ->subject($subject)
                ->with([
                        'token'   => $this->token
                        'userEmail' => $userEmail,
                        'userName'  => $userName
                      ]);
    }   

上記に気付いた場合、ユーザーの名前を渡してユーザーのメールアドレスを見つける方法がわかりません。このデータを User Model から送信する必要がありますか、それとも Mailable クラスからクエリを実行する必要がありますか? 誰かが私にそれを行う方法を教えてもらえますか?

4

1 に答える 1

1

通常、パスワード リセットのメールを送信するためにユーザーのメールを要求します。そのメールは、ルート コントローラーへのリクエスト パラメーターとして送信されます。

デフォルトでは、L5.3 は post('password/email) ルートを使用してパスワードのリセット要求を処理します。このルートは、App\Http\Controllers\Auth\ForgotPasswordController で使用される「SendsPasswordResetEmails」トレイトで定義されている sendResetLinkEmail メソッドを実行します。

ここから、次の 2 つのオプションのいずれかを選択できます。

1つ目:同じコントローラー(または他のコントローラー、この場合はpostEmail関数)で別の関数を呼び出すルートを上書きして、受信した電子メールでユーザーモデルを検索し、ユーザーモデルを次のように渡すことができますキュー メール アクションを実行するメソッドへの function パラメータ (これは、SendsPasswordResetEmails を上書きする必要がある場合と必要でない場合があります。これは、パスワードのリセット メソッドをどのように処理するかによって異なります)。

このソリューションは次のようになります。

routes/web.php 内

post('password/email', 'Auth\ForgotPasswordController@postEmail')

app/Mail/passwordNotification.php 内 (例)

protected $token;
protected $userModel;

public function __construct($token, User $userModel)
{
    $this->token = $token;
    $this->userModel = $userModel;
}

public function build()
{
    $userEmail = $this->userModel->email;
    $userName = $this->userModel->email
    $subject = 'Password Reset';

    return $this->view('emails.password')
                ->to($userEmail)
                ->subject($subject)
                ->with([
                        'token'   => $this->token
                        'userEmail' => $userEmail,
                        'userName'  => $userName
                      ]);
    }  

app/Http/Controllers/Auth/ForgotPasswordController 内

public function postEmail(Request $request)
    {
        $this->validate($request, ['email' => 'required|email']);
        $userModel = User::where('email', $request->only('email'))->first();
        Mail::queue(new ResetPassword($token));
        //Manage here your response
    }

2番目: 特性 SendsPasswordResetEmails を上書きして、メールでユーザー モデルを検索し、sendResetLinkEmail 関数でカスタマイズした関数を使用することができます。そこで関数を使用できますが、ForgotPasswordController に既にあるため、何らかの方法で応答を作成して応答を作成する必要があることに注意してください。

それが役立つことを願っています!

于 2016-11-18T20:55:36.230 に答える