こなさんち

しがないフリーランスエンジニアの備忘録。

独自Validation作っちゃお☆@Laravel5

お早うございます。 安定剤のせいで体調不良な空瓶です。

動機

LaravelのValidationってめっちゃ便利!でも変に組み合わせると見にくいし可読性に欠けてしまう。
→自分で作れるんやない?

概要

他サイトやQiitaにて似たような記事はありますが、備忘録も兼ねてまとめておきます。

1.既存のValidaterを継承したクラスの作成
2.Providerの定義と登録
3.使用

1.既存のValidaterを継承したクラスの作成

場所は任意です。
今回は app/Validator を作成して、その中に作ります。
(ディレクトリ名称を[Valdiators]にしようか迷いましたが、中身は1つだけなのでいいかな..複数作る予定もないし。)

<?php

namespace App\Validator;

class CustomValidation extends \Illuminate\Validation\Validator
{
    public function validateCodeStringCheck($attribute, $value, $parameters)
    {
        if (ctype_alnum($value)) {
            if (ctype_alpha(substr($value, 0, 1))) {
                return true;
            }
        }
        
        return false;
    }
}

この関数名ですが、[validate]はプレフィックスになっており、[codeStringCheck]というValidation名として使用します。
また、エラーメッセージの使用はValidation名をスネークケースにして使用します。(サンプルは後ほど。)

2.Providerの定義と登録

php artisan make:provider ValidatorServiceProvider でProviderを作りましょう。atisanに頼ります。

そして、config/app.phpに追加します。

<?php
...
'providers' => [

        ...
        
        App\Providers\ValidatorServiceProvider::class, // custom

    ],

3.使用

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class CompanyRequest extends Request
{
    /**
    * Determine if the user is authorized to make this request.
    *
    * @return bool
    */
    public function authorize()
    {
        return true;
    }

    /**
    * Get the validation rules that apply to the request.
    *
    * @return array
    */
    public function rules()
    {
        return [
            'mail_address' => 'email|required',
            'company_code' => 'required|min:4|max:20|codeStringCheck',
            'company_name' => 'required|max:20',
        ];
    }
    
    public function messages()
    {
        return[
            'company_code.code_string_check' => '英字から始まる半角英数字の文字列を入力してください。'
        ];
    }
}
php```