目的
- バリデーションルールを自分で作成するカスタムバリデーターについてまとめる
環境
- ハードウェア環境
項目 | 情報 |
---|---|
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してある。
方法
-
laravel8_easy_crud/app
ディレクトリ直下に「Validator」ディレクトリを作成する。 -
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)); } }
-
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); }); } }
-
当該のフォームリクエストクラスを下記のように修正して作成したバリデーションルール名を記載する。自分で作成したバリデーションルールを使いたい場合は
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'], ]; } }
-
確認
-
laravelのローカルサーバーを起動してURL/contents/createにアクセスし数値以外の数字を入力して「投稿」をクリックする。
-
下記のように入力テキストボックスの上にカスタムバリデーターのデフォルトのエラーメッセージが表示されれば自分で作成したカスタムバリデーターが正しく機能している。
-