【Laravel】withInputとoldを使用して、エラー後もフォームの入力値を保持する
Laravelでお問い合わせフォームなどを作成する際、バリデーションエラーなどで送信できずに入力画面へ戻ることがあります。このとき、ユーザーが入力した値が消えてしまうと再入力の手間がかかりますが、Laravelでは簡単な記述で入力値を保持させることができます。
今回はその具体的な実現方法を解説します。
Controller側の記述
例えば、重複チェックを行い、エラーがあった場合に元の画面へ戻す処理を考えてみます。
$currentId = $request->id;
$reservation_find = Reservations::where('reserve_id', $request->reserve_id)
->where('id', '!=', $currentId)
->first();
if (isset($reservation_find)) {
return back()->withInput()->with('error', 'この来店予約IDは既に使われています。別の来店予約IDを指定してください。');
}
上記はcontrollerの記述です。
注目するのはreturn back()->withInputです。このwithInput()を呼び出すことで、ユーザーがフォームに入力した情報をセッションに一時保存したまま、前の画面に戻ることができます。
View側の記述
次に、ユーザーが表示する画面側の記述です。controllerからwithInputで受け取ったデータは、old()関数で受け取ります。
oldの仕組み
old(‘引数1’, ‘引数2’)配下のような優先順位で値を表示をしてくれます。
- 直前に入力された値(エラーで戻ってきたとき)があれば、それを最優先で表示する
- 直前の入力値がなければ、第二引数の値(例:DBから取得した既存データ)を表示する
<dl class="row">
<dt class="label">来店予約ID</dt>
<dd>
<input type="text" name="reserve_id" value="{{ old('reserve_id', $reservation->reserve_id ?? '') }}" class="input" required>
</dd>
</dl>
まとめ
Laravelなら、コントローラでwithInputを使い、Bladeでold()を使うという記述だけで、フォーム機能の入力値の保持が実装できます。ぜひ活用してみてください。
エンジニアのみなさまへ
株式会社オートプロジェクトでは、中小企業向けのシステム・アプリケーション開発 / 外注サービスを提供しております。
貴社のニーズに応じた柔軟なサポートを行いますので、ぜひお気軽にご相談ください。

EC用公式アカウント