【Laravel】フォームのバリデーションエラー時に入力された値を保持する


バリデーションエラー時に入力された値を保持する

グローバルに定義されており、どこからでも呼び出せるoldヘルパをinput要素のvalueに設定します。

バリデーションを行っていないときは何も表示されず、エラーが発生したときのみ値を表示することができます。

参考:

old関数はセッションにフラッシュデーターとして保存されている直前の入力値を取得します。

hoge.blade.php
// テキストの内容を保持(type="date"なども同様)
<input type="text" name="freeWord" value="{{ old('freeWord') }}">

// チェックされたチェックボックスを保持
<input type="checkbox" name="checkBox" value="0" {{ old('checkBox') == '0' ? 'checked' : '' }}>
<input type="checkbox" name="checkBox" value="1" {{ old('checkBox') == '1' ? 'checked' : '' }}>
<input type="checkbox" name="checkBox" value="2" {{ old('checkBox') == '2' ? 'checked' : '' }}>

// チェックされたラジオボタンを保持
<input type="radio" name="radioButton" value="0" {{ old('radioButton') == '0' ? 'checked' : '' }}>
<input type="radio" name="radioButton" value="1" {{ old('radioButton') == '1' ? 'checked' : '' }}>
<input type="radio" name="radioButton" value="2" {{ old('radioButton') == '2' ? 'checked' : '' }}>

バリデーション成功時にも入力された値を保持する

バリデーションに成功後に遷移する画面が同じ画面であれば、その場合も値を保持する必要があります(画面に埋め込まれた検索フォームで検索後に同じ画面に戻ってくる場合など)。

oldヘルパは第二引数にデフォルトで表示する値を設定できるので、コントローラから受け取った検索条件を第二引数に設定してあげれば、バリデーションの成功時にも値を保持することができます。

hogeController.php
 public function index(Request $request)
    {
        // バリデーション処理など...

        // リクエストから検索条件を取得する
        $searchConditions['freeWord'] = $request->input('freeWord');
        $searchConditions['checkBox'] = $request->input('checkBox');
        $searchConditions['radioButton'] = $request->input('radioButton');

        // 実際の検索処理など...

        // 再度inputに表示するため、検索条件をコントローラからビューに渡してあげる
        return view('hoge', ['searchConditions' => $searchConditions,]);
    }
hoge.blade.php
// 第二引数($searchConditions)に値が設定されており、エラーが発生していない場合、第二引数の値が表示される
<input type="text" name="freeWord" value="{{ old('freeWord', $searchConditions['freeWord'])) }}">

<input type="checkbox" name="checkBox" value="0" {{ old('checkBox', $searchConditions['checkBox']) == '0' ? 'checked' : '' }}>
<input type="checkbox" name="checkBox" value="1" {{ old('checkBox', $searchConditions['checkBox']) == '1' ? 'checked' : '' }}>
<input type="checkbox" name="checkBox" value="2" {{ old('checkBox', $searchConditions['checkBox']) == '2' ? 'checked' : '' }}>

<input type="radio" name="radioButton" value="0" {{ old('radioButton', $searchConditions['radioButton']) == '0' ? 'checked' : '' }}>
<input type="radio" name="radioButton" value="1" {{ old('radioButton', $searchConditions['radioButton']) == '1' ? 'checked' : '' }}>
<input type="radio" name="radioButton" value="2" {{ old('radioButton', $searchConditions['radioButton']) == '2' ? 'checked' : '' }}>