【Laravel】 バリデーションエラー時、oldを使って入力した値を保持する

えびさん

Laravelのフォームでバリデーション引っかかったときに直前に入力された値を保持する

old(‘name属性’, ‘デフォルト値’)を使う

old関数とは

Laravelが用意してくれているグローバルなヘルパ関数
バリデーションなどで画面に戻されたときに、直前に入力された値を表示することができる
第一引数にname属性、第二引数 (省略可)にデフォルト値をいれる

<!-- テキスト -->
<input type="text" name="content" value="{{ old('content') }}" />
<!-- ラジオボタン -->
<input type="radio" name="gender" value="male" {{ old('gender') === 'male' ? 'checked' : '' }} />
<!-- チェックボックス -->
<input type="checkbox" name="color" value="red" {{ old('color') === 'red' ? 'checked' : '' }} />
<!-- セレクトボックス -->
<select name="fruits">
  <option value="lemon" {{ old('fruits') === 'lemon' ? 'selected' : ''>🍋</option>
</select>
<!-- テキストエリア -->
<textarea name="memo">{{ old('memo') }}</textarea>

old関数はまだ何も入力されていない場合はnullを返してくれるので
そのまま使用しても無問題

えびさん

編集画面では、デフォルトは登録されてる値にしたい・・

こうする

<?php
// 省略
public function form(Data $data)
{
  return view('form', compact('data'));
}
<!-- テキスト -->
<input type="text" name="content" value="{{ old('content', $data->content) }}" />
<!-- ラジオボタン -->
<input type="radio" name="gender" value="male" {{ old('gender', $data->gender) === 'male' ? 'checked' : '' }} />
<!-- チェックボックス -->
<input type="checkbox" name="color" value="red" {{ old('color', $data->color) === 'red' ? 'checked' : '' }} />
<!-- セレクトボックス -->
<select name="fruits">
  <option value="lemon" {{ old('fruits', $data->fruits) === 'lemon' ? 'selected' : ''>🍋</option>
</select>
<!-- テキストエリア -->
<textarea name="memo">{{ old('memo', $data->memo) }}</textarea>

$dataにはテーブルのEloquentデータが入ってる前提