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