エラーメッセージを表示する　laravel

#エラーメッセージを表示させる

###はじめに
なにか参考になる人がいればいいですが
基本自分がわかればいいくらいの気持ちで記しているので
ちょいとわかりにくい表現になってたり
本ページの構成も適当になってたり、
すると思います。


では本題へ


```php:index.blade.php
   <form action="/hello" method="post">
   <table>
     @csrf
     @error('name')
       <tr><th>エラー！</th>
       <td>{{($message)}}</td></tr>
     @enderror
     <tr><th>名前: </th><td><input type="text" name="name" value="{{old('name')}}"></td></tr>
.
.
.
. 
```

@error('name')　「name」にエラーがあるかチェックできる。

##フォームリクエスト

今まではコントローラーにバリデーションが設置されていたけど
「クライアントが送信したフォームがリクエストされる」
そのリクエストの時にバリデーションを設置した方がいいらしい。


フォームリクエストを作成する

```php
php artisan make:request ○○Request
```
○○は好きに設定

Http/Requests/○○Request.php 
が作成される。
この中にフォームリクエストを作成していく


```php:○○Request.php
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ○○Request extends FormRequest
{
   public function authorize()
   {
       return false;
   }

   public function rules()
   {
       return [
           //
       ];
   }
}
```

rules 適用されるバリデーションの検証ルールを設定する。
これで指定されたルールを元にバリデーションチェックが実行される。

```php:○○Request.php
class ○○Request extends FormRequest
{
   public function authorize()
   {
       if ($this->path() ==  '○○')
       {
           return true;
       } else {
           return false;
       }
   }

   public function rules()
   {
       return [
           'name' => 'required',
           'mail' => 'email',
           'age' => 'numeric|between:0,150',
       ];
   }
}
```

○○以外から利用できないようにする

フォームリクエスト学習以前は
コントローラーに検証ルールを書いていたけど
○○Request.php
にもう記入したので書き直す

```php:Controller
// use App\Http\Request\○○Request;
public function post(○○Request $request)
{
    return view('▷▷.index',['msg'=>'正しく入力できています。']);
}

```
post()の中が　「○○　$request」となっている
〇〇Requestで設定したバリデーションが
これで実行される。

##メッセージをカスタマイズしていく

このままだとデフォルトでついている（？）エラー文が
吐き出されるので（しかも英文）以下を追加。


```php:〇〇Request.php
   public function messages(){
      return[
          'name.required' => '名前は必ず入力してください',
          'mail.email' => 'メールアドレスが必要です'　,
          'age.numeric' => '年齢を整数で記入してください',
          'age.between' => '年齢は０〜１００の間で入力してください',  
 ];
}
```
検証ルールごとにエラーになった場合に
それぞれメッセージを設定する。
記述がないとデフォルトの英文が使われるよう。


##バリデータの作成
今まではエラーがあったら必ずフォームにもどるような処理に
なっていたけど（Request.phpのなかのFormRequestに用意されている処理）
場合によっては　
フォームに戻らないようにしたいとか
エラーが起きたときに別の処理を行いたいとか
あったりする。
その時に　バリデータ　を用意する。

```php:〇〇Controller
// use Validator; を追記

public function post(Request $request){
   $validator = Validator::make($request->all(),[
       'name' => 'required',
       'mail' => 'email',
       'age' => 'numeric|between:0,150',
]);

   if ($validator->fails()){
       return redirect('/hello')
              ->withErrors($validator)
              ->withInput();
  } 
   return view('hello.index',['msg'=>'正しく入力されました！']);
}
   
```

`validator = Validator::make( 値の配列 , ルールの配列 );`

第１引数には、チェックする値をまとめた配列を用意する。
複数あるフォーム全体をチェックしたいのであれば
allで全部指定。
第２引数には、検証ルールを。


`if ($validator->fails()) {エラーの時の処理}`

この「fails」は、バリデーションでエラーが発生しているかどうか
調べるもの。
「true」ならばエラーが発生しているということ。
エラーの処理が発生し
returnで「/hello」が呼び出されている。
「/hello」を呼び出すだけではエラー文など
表示されないので
エラーメッセージとフォームの入力情報を
表示させないといけない。

`withErrors`でValidatorインスタンスを渡している。
Validatorで発生したエラーメッセージを
リダイレクト先まで引き継ぐことができる。
`withInput`は送信されてきたフォームの値をそのまま引き継ぐ。

###エラーメッセージをカスタマイズ

ここでバリデータを作ったときに
エラーメッセージがデフォルトにもどってしまっているので
カスタマイズしていく

`validator = Validator::make(値の配列,ルール配列,メッセージ配列,)`
のようにバリデータを作る時（？）に作れるっぽい。
第３引数に指定。

```php
public function post(Request $request)
{
   $rules = [
       'name' => 'required',
       'email' => 'email',
       'age' => 'numeric|between:0,150',
];
  $messages = [
      'name.required' => '名前は必ず入力してください',
      'mail.email' => 'メールアドレスを入力してください',
      'age.numeric' => '年齢を整数で記入してください',
      'age.between' => '年齢は０〜１００の間で入力してください',
];
  $validator = Validator::make($request->all(), $rules, $messages);
  if ($validator->fails()) {
      return redirect('/hello')
         ->withErrors($validator)
         ->withInput();
 }
  return view('hello.index', ['msg'=>'正しく入力されました！']);
}
```

$rules $messages にそれぞれルールと
エラーメッセージを入力している。

それを第２、３引数に指定する。
これでエラーメッセージのカスタマイズ完了。

今日はここまで〜〜。お疲れ様です。