株式会社オートプロジェクト

【Laravel】withInputとoldを使用して、エラー後もフォームの入力値を保持する

【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’)配下のような優先順位で値を表示をしてくれます。

  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()を使うという記述だけで、フォーム機能の入力値の保持が実装できます。ぜひ活用してみてください。

エンジニアのみなさまへ

株式会社オートプロジェクトでは、中小企業向けのシステム・アプリケーション開発 / 外注サービスを提供しております。

貴社のニーズに応じた柔軟なサポートを行いますので、ぜひお気軽にご相談ください。

中小企業向けシステム・アプリケーション開発 / 外注サービスについて、オートプロジェクトに問い合わせをする

Contact ご相談・お問い合わせ

実現の可否や概算費用、納期に関するご質問・ご相談も、
どうぞご遠慮なくお問い合わせください。

TOP