laravel バリデーション 調べてみた

laravelのバリデーションについて

laravelでバリデーションを実装するには3つの方法があります。

①controller内でのバリデーション

②ファザードを利用したバリデーション

③フォームリクエストでのバリデーション

 

controller内でのバリデーション

コントローラーでは標準でバリデーションを実装できるvalidateメソッドが利用できます。

以下使用例になります。

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
 public function show(Request $request) {
   $rules = [ ・・・①
     'name' => ['required', 'unique'] ・・・②
   ];
   $this->validate($request, $rules); ・・・③
   $name = $request->get('name'); ・・・④
 }
}

①バリデーションルールを配列で指定します。

②バリデーションルールは、キーにバリデートする値を、値にバリデーションルールを配列または|区切りで指定します。

指定できるバリデーションルールは公式ドキュメントを参照してください。

③引数にバリデートする値とバリデーションルールを指定して、validateメソッドを実行します。

④③が通れば、④以降の処理を実行します。

③でバリデーションルールに引っかかった場合は、前のページへリダイレクトします。

 

ファザードを利用したバリデーション

Illuminate\Support\Facades\Validatorをインスタンス化することでもバリデーションを実装できます。

以下使用例になります。

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class HomeController extends Controller
{
 public function show(Request $request) {
   $rules = [ ・・・①
     'name' => ['required', 'unique'] ・・・②
   ];
   $validator = Validator::make($request, $rules); ・・・③
    if ($validator->fails()) { ・・・④
      
    }
   $name = $request->get('name'); ・・・⑤
 }
}

① 、②はコントローラー内でのバリデーションの時と同様にバリデーションルールを指定します。

③Validatorファザードのmakeメソッドを実行します。

④③で作成した$validatorに対してfailsメソッドを実行することでバリデーションが実行されます。

バリデーションに引っかかった場合は、if文内の処理を実行します。

⑤④でバリデーションに通った場合に、④以降の処理を実行します。

 

フォームリクエストでのバリデーション

以下にまとめていますので、参考にしてください。

laravel HTTPリクエストまわり 調べてみた

バリデーション失敗時は、デフォルトでは前の画面にリダイレクトするのですが、Illuminate\Fundation\Http\FormRequestのオーバーライドなどでカスタマイズ可能です。

 

エラーメッセージの表示

エラーメッセージは、Bladeテンプレートで以下の様に表示させることができます。

@if($errors->has('name'))
 <p class="error-text">{{$errors->first('name')}}</p>
@endif

上記の例では、nameがバリデーションに引っかかったらバリデーションメッセージを出力するようになっています。

これ以外にも、全てのエラーメッセージを一度に取得する@errors->allなどが使用できます。

また、フォームリクエストではエラーメッセージをカスタマイズすることができます。

以下、使用例になります。

<?php

namespace App\Http\Requests;  
use Illuminate\Foundation\Http\FormRequest;  
class userRegister extends FormRequest 
{  
  public function authorize()  
 {  
   return false;  
 }   

  public function messages() ・・・①  
 { 
   return [  'name.required' => '名前は必ず入力してください',  ];  
 }   

  public function rules()  
 {  
   return [  
        'name' => 'required | string | max:255',  
        'email' => [  'required',  'string',  'email',  'max:255',  ]  
       ];  
 } 
}

①messages 関数を実装することでエラーメッセージのカスタマイズが可能です。

 

独自ルールの作り方

以下コマンドで独自ルールのファイルをapp\Rules以下に作成できます。

php artisan make:rule ファイル名

作成した例は以下になります。

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class TextRule implements Rule
{
 public function __construct()
 {
   //
 }

 public function passes($attribute, $value) ・・・①
 {
   return $value === 'annkw';
 }

 public function message()
 {
   return '文字列がannkwではありません。'; ・・・②
 }
}

①バリデーションルールを作成します。

返り値がtrueであればバリデーション成功、falseであればバリデーション失敗になります。

(例では文字列がannkwかどうかという一生使わないであろうバリデーションルールを作成しました)

②エラーメッセージを指定します。

 

使い方は、バリデーションルールを作成するときにインスタンス化するだけです。

以下例になります。

$rules = [ 'name' => ['required', 'unique'],  'text' => new TextRule() ];

以上!!!!!!!