Laravelのold()関数でフォーム再表示時に値を保持する方法
先生と生徒の会話形式で理解しよう
生徒
「先生、Laravelでフォーム送信後にエラーが出たとき、入力した値が消えてしまうんですけど、何とかならないですか?」
先生
「それならold()関数を使うと便利です。以前入力した値を自動で保持して、フォーム再表示時に復元できます。」
生徒
「具体的にはどうやって使うんですか?」
先生
「それでは、Bladeテンプレートでの使い方を見ていきましょう!」
1. old()関数とは?
Laravelのold()関数は、前回のリクエストで送信されたフォームの値を取得するための関数です。例えば、ユーザーが名前やメールアドレスを入力してフォーム送信した際に、バリデーションエラーでフォームが再表示される場合、入力値が消えずに残るようにすることができます。これにより、ユーザーの入力ミスを修正するだけで済み、ユーザー体験が向上します。
2. Bladeテンプレートでの使い方
具体的には、入力フィールドのvalue属性にold()を設定します。例えば、名前とメールアドレスの入力フォームは次のようになります。
<form action="/contact" method="POST">
@csrf
<div>
<label for="name">名前:</label>
<input type="text" id="name" name="name" value="{{ old('name') }}">
</div>
<div>
<label for="email">メールアドレス:</label>
<input type="email" id="email" name="email" value="{{ old('email') }}">
</div>
<button type="submit">送信</button>
</form>
このようにvalue="{{ old('フィールド名') }}"と書くことで、前回入力した内容が自動でセットされます。
3. selectやtextareaでの利用方法
selectボックスやtextareaでもold()を使えます。選択状態やテキスト内容を保持することで、ユーザーが再入力する手間を省けます。
<select name="gender">
<option value="male" {{ old('gender') == 'male' ? 'selected' : '' }}>男性</option>
<option value="female" {{ old('gender') == 'female' ? 'selected' : '' }}>女性</option>
</select>
<textarea name="message">{{ old('message') }}</textarea>
4. バリデーションと組み合わせる
Laravelのバリデーションと組み合わせることで、フォーム送信時にエラーが発生した場合もold()で値を保持できます。例えば、コントローラでバリデーションエラーが発生した場合、自動的にリダイレクトされ、入力値はold()で復元されます。
public function store(Request $request) {
$validated = $request->validate([
'name' => 'required|max:50',
'email' => 'required|email'
]);
// データ保存処理
}
5. old()関数を使うときのポイント
- フォームの各入力フィールドに
old('フィールド名')を設定する - selectやradio、textareaも同様に値を復元できる
- バリデーションエラー時のリダイレクトと組み合わせると自動で値が保持される
- 初期値がある場合は
old('name', '初期値')のように設定できる
これらのポイントを押さえることで、ユーザーにとって入力しやすく、ストレスの少ないフォームを作成できます。