前回までの記事で、Formリクエストを使用してリクエストを個別化する方法やバリデーションメッセージの編集などを行ってきました。
今回の記事では独自のバリデーションルールを追加して、バリデーション機能をさらにカスタマイズしましょう!
前回までのバリデーション記事でもmembersテーブルを使用していたので、今回もこちらのテーブルを使用します。
今回は名前を入れる欄があるので、かなを入れる欄を追加しましょう。
bladeを編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<form method="POST" action="/members"> {{ csrf_field() }} <div> <label for="name">名前</label> <input type="text" name="name" required value="{{ old('name') }}"> {{ $errors->first('name') }} </div> <div> <label for="kana">かな</label> <input type="text" name="kana" required value="{{ old('kana') }}"> {{ $errors->first('kana') }} </div> <div> <label for="position">ポジション</label> <input type="text" name="position" required value="{{ old('position') }}"> {{ $errors->first('position') }} </div> <div> <label for="height">身長</label> <input type="number" name="height" required value="{{ old('height') }}"> {{ $errors->first('height') }} </div> <div> <input type="submit" value="送信"> </div> </form> |
準備ができました。それではバリデーションルールを記述しましょう。今回のバリデーションルールはひらがな入力か否かですので正規表現 /[^ぁ-んー]/u にマッチするか確認します。
クロージャを使用する
MembersRequest.php(作成したFormRequestクラスです)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public function rules() { return [ 'name' => 'required|string|max:100', 'kana' => [ 'required', 'string', 'max:255', function ($attribute, $value, $fail) { if (preg_match('/[^ぁ-んー]/u', $value) !== 0) { return $fail('かなはひらがなで入力してください'); } } ], 'position' => 'required|string|max:255', 'height' => 'required|numeric|digits_between:2,3', ]; } |
前回までの記事で、Formリクエストを既に作成していますので、このクロージャはMembersRequest.phpに記述していますが、もちろんコントローラーにも直接記述可能です。サイト全体の中で、一度しか使用しないルールなどはこちらで記述するといいと思います。
Ruleオブジェクトを作成する
artisanから新規にRuleオブジェクトを作成して、呼び出すことも可能です。
1 |
php artisan make:rule kana |
App/Rules/kana.php
1 2 3 4 5 6 7 8 9 |
public function passes($attribute, $value) { return preg_match('/[^ぁ-んー]/u', $value) === 0; } public function message() { return 'かなはひらがなで入力してください'; } |
MembersRequest.php
1 2 3 4 5 6 7 8 9 10 11 |
+ use App\Rules\kana; public function rules() { return [ 'name' => 'required|string|max:100', 'kana' => ['required', 'string', 'max:255', new kana], // new kanaを追記 'position' => 'required|string|max:255', 'height' => 'required|numeric|digits_between:2,3', ]; } |
Ruleオブジェクトを使用する場合は、コントローラーまたはFormRquestでRuleオブジェクトを呼び出します。
messageメソッドでエラーメッセージを記述。もちろん言語ファイルに記述した文章も使用できます。
クロージャ、Ruleオブジェクトを使用する場合、|でバリデーションルールを記述出来ませんので注意してください。
サービスプロバイダーに登録する
サイト中、何度も使用するルールの場合はサービスプロバイダに記述し、|記法を使用できるようにしましょう。
1 |
php artisan make:provider KanaServiceProvider |
App/Providers/KanaServiceProvider.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
+ use Illuminate\Support\Facades\Validator; class KanaServiceProvider extends ServiceProvider { /** * Bootstrap services. * * @return void */ public function boot() { Validator::extend('kana', function ($attribute, $value, $parameters, $validator) { return preg_match('/[^ぁ-んー]/u', $value) === 0; }); } |
config/app.php
1 2 |
'providers' => [ App\Providers\KanaServiceProvider::class, // providersに追加 |
これで|記法を使用できます。
MembersRequest.php
1 2 3 4 5 6 7 8 9 |
public function rules() { return [ 'name' => 'required|string|max:100', 'kana' => 'required|string|max:255|kana', 'position' => 'required|string|max:255', 'height' => 'required|numeric|digits_between:2,3', ]; } |
ですがこのままですと、バリデーションメッセージが設定されていません。
ので、言語ファイルにバリデーションメッセージを追加しましょう。
resource/lang/ja/validation.php
1 2 3 4 |
'kana' => ':attributeはひらがなで入力してください。 //メッセージを追加 'attributes' => [ 'kana' => 'かな', //attributeに追加 |
以上、3種類のカスタムバリデーションルールを追加する方法でした。
ここまで出来ればほとんどの状況に対応できるようになるはずです。サイトに合わせて色々改造していく方法を探していくのって楽しいですね!
コメントを書く