読者です 読者をやめる 読者になる 読者になる

tanaka's Programming Memo

プログラミングについてのメモ。

Laravel5.2でバリデーション失敗時に入力値を残す

バリデーション失敗時に、入力値を残す

HTTP Requests - Laravel - The PHP Framework For Web Artisans の Old Input を利用します。入力値をセッションに記録(flush)するものです。

バリデーションの失敗時には、Laraveが自動的に記録してくれるので何もしなくても使えます。

Bladeテンプレートからは以下のように参照できます。

<input type="text" name="username" value="{{ old('username') }}">

コントローラーからは以下のように参照できます。

$request->old('username');

次の画面に入力値を受け渡す

バリデーション失敗時ではなく、次の画面で入力されたデータを確認のために表示したい場合などは、以下を呼び出せば同じくoldで参照できます。

$request->flash();

全てのデータではなく、指定のデータのみ引き継ぎたい場合や、除外したい場合は以下です。

// usernameとemailのみ、次に引き渡す
$request->flashOnly(['username', 'email']);

// passwordは渡さない
$request->flashExcept('password');


リダイレクトと同時に記録するには withInput() を呼びます。

// formに入力値全てを受け渡す
return redirect('form')->withInput();

// 入力値のうち、passwordだけ除外して、引き渡す
return redirect('form')->withInput($request->except('password'));

成功した時に、次の画面で値を消すには?

自動的に消えるので、特に何もする必要はありません。

エラーをBladeで判定

Laravel5.2では、以下で動きました。name属性についてのエラーがあるかを確認して、あれば bootstrapのhas-errorクラスを追加することで、該当するグループを赤く目立たせます。

<div class="form-group @if(!empty($errors->getBag('default')->first('name'))) has-error @endif">
:
</div>