例えば、ログインフォームをモーダルで実装していた時とかに、何もしていないとログイン失敗でリダイレクト時にモーダルが隠れている状態になるので 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
~~protectedfunctionsendFailedLoginResponse(Request$request){throwValidationException::withMessages([$this->username()=>[trans('auth.failed')],]);}~~
で処理されているっぽい。
ここでは単純にバリデーションをthrowしているだけ。なのでここをよしなに修正する。
流石に vendor
内をいじるのは良くないので、 LoginController
でオーバーライドする。
LoginController.php
protectedfunctionsendFailedLoginResponse(Request$request){// throw ValidationException::withMessages([// $this->username() => [trans('auth.failed')],// ]);// ↑が元々の記述returnback()->with('login_modal','active')->withErrors([$this->username()=>[trans('auth.failed')],]);}
以上!
モーダルは class="active"
で表示状態になるとして、
modal
<divid="modal"class="{{ session('login_modal') }}">~~</div>
としておくと、 sendFailedLoginResponse()
で帰ってきたときにモーダルがactiveになる。
以上!