⛳
[Laravel]独自のバリデーションを作る
環境
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