Laravelのvalidationのメモ

バリデーション 5.6 Laravel

①エラーがあると、前のページにリダイレクトさせたい場合

コントローラー側の基本形 

$request->validate([
  'id' => 'required|alpha_num',
]);

エラーがあると、前のページにリダイレクトする。その際、GETでリダイレクトされるため、前ページは、GETでアクセス可にしておく。

Route::get(....

 

View側の基本形 

<div class="{{ $errors->has('id') ? ' has-error' : '' }}">
  <input type="text" name="id" value="{{old('id', 初期値)}}">
  @if ($errors->has('bank_name'))
   <span class="help-block">
    <strong>{{ $errors->first('bank_name') }}</strong>
   </span>
  @endif
</div>

 

フォームを囲むDIVのclassに、

{{ $errors->has('id') ? ' has-error' : '' }}

 

を書いておくことで、エラーがあるとフォームに色をつけることができる。

フォームのvalueは、

{{old('id', 初期値)}}

 

としておくことで、エラーで戻ってきた際、元の入力値を受けることができる。

 

エラーメッセージ

laravel/resources/lang/ja/validation.phpに記載する

・属性を変える場合

'attributes'の中に属性のみ追記していく。 

'attributes' => [
  'id' => '会員ID',
],

・メッセージも変える場合

'custom'の中に追記していく。 

 'custom' => [
  'bank_name' => [
   'required' => '銀行名は必須です!',
  ],
],

 

ajaxでリクエストを送信した時は・・・

$request->validate([
]);

ajaxの場合、上記を書いておけば、エラーがあるとリダイレクトせず、バリデーションエラーを全部含んだJSONレスポンスが返される。

そして、ajax

$.ajax({
    type: "POST",
    dataType: "json",
    data: {},
    url: "{{ asset('xxxx') }}",
}).done(function(data){
}).fail(function(res){

    ※ここの部分

});

 fail()にレスポンスが返ってくる(422HTTPステータスで)。

 

確認画面から「戻る」ボタンを押した際、入力値を保存するには・・・ 

confirmのコントローラーに以下を記載

$request->flash();

「戻る」ボタンを押すと、

<form method="GET" action="{{ asset('元のURL') }}">

が実行されるようにしておく。

そうすると、元のページに戻った際、入力値が

{{old('id', 初期値)}}

で取得できている。

 

②エラーがあると、違うページにリダイレクトさせたい場合 

$validator = Validator::make($request->all(), [
  'id' => 'required|alpha_num',
]);
if ($validator->fails()) {
  return redirect('/error');
}