1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-02-04

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

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

では本題へ

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 artisan make:request ○○Request

○○は好きに設定

Http/Requests/○○Request.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 適用されるバリデーションの検証ルールを設定する。
これで指定されたルールを元にバリデーションチェックが実行される。

○○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
にもう記入したので書き直す

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

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

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

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

〇〇Request.php
   public function messages(){
      return[
          'name.required' => '名前は必ず入力してください',
          'mail.email' => 'メールアドレスが必要です' ,
          'age.numeric' => '年齢を整数で記入してください',
          'age.between' => '年齢は0〜100の間で入力してください',  
 ];
}

検証ルールごとにエラーになった場合に
それぞれメッセージを設定する。
記述がないとデフォルトの英文が使われるよう。

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

〇〇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( 値の配列 , ルールの配列 );

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

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

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

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

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

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

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

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

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

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

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?