[Laravel]独自のバリデーションを作る

2022/10/27に公開

Laravel_Image

環境

Amazon Linux 2
Composer version 2.3.9
Laravel Framework 9.19.0
PHP 8.0.18

さっそく始めていきます

Provider の作成,

$ php artisan make:provider ValidatorServiceProvider

app/Providers/ に作成されます。

app/Providers/ValidatorServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Models\Users;
use Illuminate\Support\Facades\Validator;

class ValidatorServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

デフォルトでこのような感じだと思います。

バリデーションを組んでいく

boot()内にValidatorクラスを使って、処理を記述していきます。

app/Providers/ValidatorServiceProvider.php
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        // 例) user_id が被っていないかチェック
	// extend(バリデーション名, function())
	Validator::extend('user_id_unique', function ($attribute, $value, $parameters, $validator) {
		$users = new Users();
		// user_id のリスト
		$id_list = $users->getAllUserID();
		
		// 初期値はtrue / バリデーションエラーならfalse
		$result = true;
		if (in_array($value, $id_list, true) {
			$result = false;
		}
		
		return $result;
	}
    }

プロバイダーを登録

プロバイダークラスを使用できるようにconfig/app.phpに登録しましょう。

config\app.php
~~~~~~~~~~~~~~~~~~~~~~
'providers' => [
        App\Providers\AppServiceProvider::class,
	~~~~~
	App\Providers\ValidatorServiceProvider::class, // これを追記
];
~~~~~~~~~~~~~~~~~~~~~~

カスタムバリデーションを使ってみる

上で設定したカスタムバリデーションを使うときは、標準ルールと同じように書ける。

CreateUserRequest.php
$validation_rules = [
	'user_id' => 'required | numeric | user_id_unique', // ↑で設定した名称
	'email' => 'required | email',
];

さいごに

「Laravelでの3つのバリデーション方法」を他の記事で書いているので合わせて見てみてください。

Discussion