0
0

More than 3 years have passed since last update.

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

Posted at

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

グローバルに定義されており、どこからでも呼び出せる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' : '' }}>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0