[0011]カスタムバリデーションクラスを作成

■CustomValidator

この例のLalavelフレームワークのバージョンは5.5です。

appにServicesフォルダを作成し、app/Services にカスタムバリデーションクラス[CustomVaidator.php]を作成しようと思います。

まずはapp/Providersにある、AppServiceProviderを編集します。

AppServiceProvider.php

              
<?php

namespace App\Providers;

use Validator;
use Illuminate\Support\ServiceProvider;
use App\Services\CustomValidator;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::resolver(function($translator, $data, $rules, $messages)
        {
            return new CustomValidator($translator, $data, $rules, $messages);
        });
    }
    public function register()
    {
        //
    }
}
              
            

useを2つ追加しました。use Validator;use App\Services\CustomValidator;です。

boot関数内にValidator::resolver(function($translator, $data, $rules, $messages) { return new CustomValidator($translator, $data, $rules, $messages); });を追加しました。これで準備Okです!

次にapp/Services にカスタムバリデーションクラス[CustomVaidator.php]を作成します。

CustomVaidator.php

              
<?php
namespace App\Services;

class CustomValidator extends \Illuminate\Validation\Validator
{
    public function validateHanNumber($attribute, $value)
    {
    	return preg_match("/^[0-9]+$/", $value);
    }
}
              
            

今回は半角数字のみOKなHanNumberを作成しました。オリジナルのバリデーションは[CustomVaidator.php]に関数を追加していきます。

次にそれぞれのバリデーションの中でやってもいいですが、共通的に利用できるよう/resources/lang/ja/validation.phpに追加します。

validation.php

              
<?php

return [

    'han_number' => ':attribute : 半角数字で入力してください.',

    'attributes' => [
        'tel' => '電話番号',
    ],

];

              
            

必要箇所のみピックアップしています。さきほどHanNumberで作成したので、han_numberの追加をしています。

また、telは電話番号なのでattributesも追加しました。

最後にバリデーションで呼び出してみます。

              
$ruleArr['tel'] = 'required|max:11|han_number';
              
            

電話番号[tel]に半角数字以外を入力すると、「電話番号 : 半角数字で入力してください.」と出ました♪

Lalavelには元々豊富なバリデージョンがありますが、実際の利用では足りないこともあるのでカスタムバリデーションクラス利用しています!