Oldヘルパーについて

2018/10/12

前回、バリデーションのチュートリアルをやりました。

バリデーションについて

ただ、このままだと一点問題が発生します。

今回はこの問題点を解決します。

 

問題点

バリデーションににひっかかると前画面に戻るのですが、この時、入力したデータが全部消えてしまいます。

ユーザーからしたら不便で仕方ないですよね。。

 

解決策

laravelで用意されているヘルパーメソッドでoldヘルパーという便利なメソッドがあります。

oldヘルパーはフォームで入力した値を取得する働きをします。

{{ old('フォームのキー名') }}

つまり入力フォームのvalueの値に、このoldヘルパーを入れると直前のデータを表示するので解決します。

<input type="text" name="username" value="{{ old('フォームのキー名') }}" />

 

改修作業

前回のチュートリアルのソースコードを改修します。

入力フォーム(index.blade.php)のvalueの値にoldヘルパーを仕込みます。

:
<form action="{{ route('validation.confirm') }}" method="post">
  <dl>
  <dt>名前:</dt>
  <dd>
  <input type="text" name="username" value="{{ old('username') }}" />
  @if($errors->has('username'))<br><span class="error">{{ $errors->first('username') }}</span> @endif
  </dd>
  </dl>

  <dl>
  <dt>Email:</dt>
  <dd>
  <input type="text" name="mail" value="{{ old('mail') }}" />
  @if($errors->has('mail'))<br><span class="error">{{ $errors->first('mail') }}</span> @endif
  </dd>
  </dl>

  <dl>
  <dt>年齢:</dt>
  <dd>
  <input type="text" name="age" value="{{ old('age') }}" />歳
  @if($errors->has('age'))<br><span class="error">{{ $errors->first('age') }}</span> @endif
  </dd>
  </dl>

  <dl>
  <dt>ご意見ご感想:</dt>
  <dd>
  <textarea name="opinion" rows="8" cols="40">{{ old('opinion') }}</textarea>
  @if($errors->has('opinion'))<br><span class="error">{{ $errors->first('opinion') }}</span> @endif
  </dd>

  <div><input type="submit" name="button1" value="送信" /></div>
  <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
:

これでエラーになっても入力値は消えません。

以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-基礎知識