副業におすすめなサイトを見る→

Laravelのold関数を使い方!フォームに値を残す方法

アプリリリースのお知らせ

予定を探すアプリyoteipickerをリリースしました。

アプリの利用用途:暇だから何か予定入れたいけど今週の土日は何しようかな〜?ってときに使えるアプリです。

Laravelで編集画面の時にデータベースにある値をフォームに表示させたり、バリデーションで引っかかった時にフォームに値を残しておくにはどうしたらいいんだろう…?

こんな疑問を解決します。

結論、old関数を使ってフォームに値を残しておくことができます。

この記事で実装する内容↓

編集画面に遷移時、データベースの値を表示させる

入力した値があったときにバリデーションに引っかかっても、入力した値をold関数を使って残す

>>ココナラと似てるおすすめの副業サイトを確認する

>>リモートワークもあるおすすめの転職サイトを確認する

休日で空いた時間の暇つぶしを探せるアプリを公開しています。

Contents

動作確認

Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1
mySQL 5.7
データベースのツール phpmyadmin

Laravelのold関数とは

Laravelのold関数は、フォーム再表示時に以前の入力値を取得するのに便利な関数です。

バリデーションエラーが発生した場合やフォームの再表示が必要な場面で使います。

Laravelのold関数の使い方

Laravelでold関数を使えば、もしバリデーションに引っかかっても入力した値を保持できます。

      <div class="form-group">
        <label for="book_min_price">{{ __('本の最低価格') }}</label>
        <input type="text" class="form-control name="book_min_price" id="book_min_price" value="{{ old('book_min_price') }}">
        @if ($errors->has('book_min_price'))
          <span class="invalid-feedback" role="alert">
            {{ $errors->first('book_min_price') }}
          </span>
        @endif
      </div>

150と入力し、更新ボタンをおす。

バリデーションに引っかかったときにold関数を使っていない場合は、入力した値を保持できない。

しかし、value値にold関数を使えば、入力した値を保持できる。

ポイントはvalueの値をold(‘name属性の値’)とすることです。

これにより、フォームの値を保持できます。

このフォームのname属性の値は、book_min_priceです。
なので、value値にold(‘book_min_price’)と書くことで、前回入力した値を保持できるってわけです。

old関数は、ビューだけでなくコントローラーでも使えます。

Laravelのold関数を使ってDBの値を表示させる

現在のコードは以下のようにold関数を使って入力した値を保持できるようにしています。

      <div class="form-group">
        <label for="book_min_price">{{ __('本の最低価格') }}</label>
        <input type="text" class="form-control name="book_min_price" id="book_min_price" value="{{ old('book_min_price') }}">
        @if ($errors->has('book_min_price'))
          <span class="invalid-feedback" role="alert">
            {{ $errors->first('book_min_price') }}
          </span>
        @endif
      </div>

しかし、これだけでは、編集画面に遷移したときにフォームは値が何もない状態です。

編集画面なので、すでにデータは登録してありデータベースにもデータが保存されていますよね。

なので、編集画面に遷移したときの初期表示は、データベースの値が表示されていることが望ましいです。

実装方法は以下です。

コントローラーで、$book = Book::find($id);と定義し、ビューに渡している
   
      <div class="form-group">
        <label for="book_min_price">{{ __('本の最低価格') }}</label>
        <input type="text" class="form-control name="book_min_price" id="book_min_price" value="{{ old('book_min_price', $book->book_min_price) }}">
        @if ($errors->has('book_min_price'))
          <span class="invalid-feedback" role="alert">
            {{ $errors->first('book_min_price') }}
          </span>
        @endif
      </div>

このようにold(‘name属性’, データベースの値)と書きます。

こうすることで、入力した値を保持する場合はold(‘name属性’)がフォームに表示され、初期表示の時はデータベースの値である$book->book_min_priceが呼ばれます。

配列の場合にold関数で表示させるには

ここまでは、name=”book_name”, old(‘book_name’)のように配列ではない場合を解説しました。

しかし、name属性が配列になる場合についても解説します。

<input type="text" name="book_name[]">
<input type="text" name="book_name[]">
<input type="text" name="book_name[]">

このように配列になっている場合は、以下のようにold関数でかけます。

<input type="text" name="book_name[]" value="{{ old('book_name.0') }}">
<input type="text" name="book_name[]" value="{{ old('book_name.1') }}">
<input type="text" name="book_name[]" value="{{ old('book_name.2') }}">

もし[]の中に変数が入ってくる場合は、

@foreach ($books as $key => $val)
	<input type="text" name="book_name[{{ $key }}]" value="{{ old("book_name.$key", $val) }}">
@endforeach

配列の場合も上記で対応できます。

【まとめ】Laravelのold関数

今回はLaravelでold関数を用いる方法を解説しました。

old関数を使えば、入力値の保持などに役立つため、ぜひ覚えておきましょう!

このブログでは他にも実務で役立つLaravelの記事を書いているので合わせてチェックしてください。

>>ココナラと似てるおすすめの副業サイトを確認する

>>リモートワークもあるおすすめの転職サイトを確認する

休日で空いた時間の暇つぶしを探せるアプリを公開しています。

スキルを売り買いするならココナラ

コメント

コメントする

CAPTCHA


Contents
閉じる