例えば、ログインフォームをモーダルで実装していた時とかに、何もしていないとログイン失敗でリダイレクト時にモーダルが隠れている状態になるので return back()->with('login_modal', 'active') でセッションにのせて返す。
blade側で {{ session('login_modal') }} で active が取れるのでclassとかにブチ込んでモーダルを表示させたいというやつです。
ログイン失敗時のLaravelの処理がググっても日本語の結果があまり出てこなかったので、誰かのためになれば。。
ログイン機能はみなさんお馴染みの make:authで作っているので、そこで生成されたものを追っていく。
ログイン処理は LoginControllerで処理されているが、 LoginControllerは AuthenticatesUsers をUseしているので、それを見にいく。
vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php
~~
protected function sendFailedLoginResponse(Request $request)
{
throw ValidationException::withMessages([
$this->username() => [trans('auth.failed')],
]);
}
~~
で処理されているっぽい。
ここでは単純にバリデーションをthrowしているだけ。なのでここをよしなに修正する。
流石に vendor内をいじるのは良くないので、 LoginControllerでオーバーライドする。
LoginController.php
protected function sendFailedLoginResponse(Request $request)
{
// throw ValidationException::withMessages([
// $this->username() => [trans('auth.failed')],
// ]);
// ↑が元々の記述
return back()->with('login_modal', 'active')->withErrors([
$this->username() => [trans('auth.failed')],
]);
}
以上!
モーダルは class="active"で表示状態になるとして、
modal
<div id="modal" class="{{ session('login_modal') }}">
~~
</div>
としておくと、 sendFailedLoginResponse()で帰ってきたときにモーダルがactiveになる。
以上!
↧