LoginSignup
1
1

laravel バリデーションルールを自分で作る(カスタムバリデーター)

Last updated at Posted at 2021-12-04

目的

  • バリデーションルールを自分で作成するカスタムバリデーターについてまとめる

環境

  • ハードウェア環境
項目 情報
OS macOS Big Sur(11.6)
ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
プロセッサ 2 GHz クアッドコアIntel Core i5
メモリ 32 GB 3733 MHz LPDDR4
グラフィックス Intel Iris Plus Graphics 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.11 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする
Laravel バージョン 8.X commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う
MySQLバージョン 8.0.21 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする

概要

  • 下記記事で取り扱ったlaravelアプリにカスタムバリデーターを作って設定してみる。
  • 今回はpostされたcontentの値が数字以外だったら弾く独自バリデーションルールを作ってみる。
  • 作業完了後のコードは下記にpushしてある。

方法

  1. laravel8_easy_crud/appディレクトリ直下に「Validator」ディレクトリを作成する。

  2. laravel8_easy_crud/app/Validator直下にCustomValidator.phpを作成して下記のように記載する。

    laravel8_easy_crud/app/Validator/CustomValidator.php
    <?php
    
    namespace App\Validator;
    
    use Illuminate\Validation\Validator;
    
    class CustomValidator extends Validator
    {
        public function validateNumOnly($attribute, $value)
        {
            return (preg_match("/^[0-9 ]+$/i", $value));
        }
    }
    
  3. AppServiceProvider.phpを開き下記のように記載する。

    laravel8_easy_crud/app/Providers/AppServiceProvider.php
    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use App\Validator\CustomValidator;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            $this->app->bind(
                \App\Repositories\ContentRepositoryInterface::class,
                \App\Repositories\ContentRepository::class
            );
        }
    
        /**
         * Bootstrap any application services.
         *
         * @return void
         */
        public function boot()
        {
            \Validator::resolver(function($translator, $data, $rules, $messages) {
                return new CustomValidator($translator, $data, $rules, $messages);
            });
        }
    }
    
  4. 当該のフォームリクエストクラスを下記のように修正して作成したバリデーションルール名を記載する。自分で作成したバリデーションルールを使いたい場合はCustomValidatorクラスで定義したメソッドのvalidateより後ろ部分をスネークケースに変換して記載する。

    laravel8_easy_crud/app/Http/Requests/ContentRequest.php
    <?php
    
    namespace App\Http\Requests;
    
    use Illuminate\Foundation\Http\FormRequest;
    
    class ContentRequest extends FormRequest
    {
        /**
         * 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 [
                'content' => ['required', 'num-only'],
            ];
        }
    }
    
  5. 確認

    1. laravelのローカルサーバーを起動してURL/contents/createにアクセスし数値以外の数字を入力して「投稿」をクリックする。

      新規投稿.png

    2. 下記のように入力テキストボックスの上にカスタムバリデーターのデフォルトのエラーメッセージが表示されれば自分で作成したカスタムバリデーターが正しく機能している。

      新規投稿.png

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1