【Laravel】カスタムバリデーションを作成する
最近初めてLaravelの案件をやることになりまして。
ひっさびさのプログラミングということもあってフレームワークの進化に驚くばかり...。
Laravelはバリデーション周りがデフォルトで充実してていいですね。
しかし、デフォルトでは実装できないバリデーションの要件があったので、
勉強がてらカスタムバリデーションを実装してみました。
前提
- PHP7.0
- Laravel 5.5.x
1. カスタムバリデーションルールを作成する
php artisan
で雛形を作成する
$ php artisan make:rule HogeCustomRule
/app/Rules/HogeCusomRule.php
が出来上がる
<?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class HogeRule implements Rule { /** * Create a new rule instance. * * @return void */ public function __construct() { // } /** * Determine if the validation rule passes. * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value) { // } /** * Get the validation error message. * * @return string */ public function message() { return 'The validation error message.'; } }
バリデーションルールはpasses()
に記載する
戻り値はboolになるよう処理を書くこと
falseのときにmessage()
に記載したエラーメッセージが表示される
public function passes($attribute, $value) { if($value % 2 == 0) { return true; } } public function message() { return ':attributeは偶数で入力してください'; }
2. フォームリクエストを作成する
php artisan
で雛形を作成する
$ php artisan make:request HogeRequest
/app/Http/Requests/HogeRequest.php
が出来上がる
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class HogeRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ // ]; } }
rules()
にバリデーションルールを書いていく
カスタムバリデーションルールはuse
で宣言した後、new HogeRule()
で適用する
use App\Rules\HogeRule;
class HogeRequest extends FormRequest
{
...
public function rules()
{
return [
'hoge' => 'required', 'integer', new HogeRule()
];
}
}
3. コントローラで利用する
コントローラー内で利用したいアクションの引数の型に先程作成したHogeRequest
を利用する
引数に宣言することでアクション実行時にバリデーションチェックを自動的に行なってくれる
use Illuminate\Http\Request; use App\Http\Requests\HogeRequest; class HogeController extends Controller { public function index() { ... } public function store(HogeRequest $request) { ... } }
やってみて
わりと簡単に実装できるもんですね。
Controllerの引数に指定するだけで自動的にバリデーションチェックをやってくれるのマジ凄い。
最近のフレームワークってこういった挙動がトレンドなんですかね。
参考サイト
- バリデーション 5.5 Laravel
- Laravel5.5で、カスタムバリデーションルール(Custom Validation Rules) 一言多いプログラマーの独り言
- laravelで独自のバリデーションルールを追加 - Qiita
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2017/09/16
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2019/07/26
- メディア: 単行本
- この商品を含むブログを見る