入力が空だとバリデーションが動かない
Validator::extend('required_if_xxx_and', function($attribute, $value, $parameters) { // なんらかの処理追加する // 通常のrequired_ifをする $param_required_if = implode(",", $parameters); $result_for_require_if = Validator::make( request()->all(), [$attribute => 'required_if:'.$param_required_if] )->passes(); return $result_for_require_if; }
こんなふうに、requireを拡張してあげたい。
つまり、入力が空に対してもバリデーションをしたい。
しかし、これでは動かないです。
なぜか。
バリデーションは、required系とその他で違う
requiredとか、空のときに動くバリデーションと、そうでないバリデーションは扱いが違います。
バリデートする属性が存在していない場合か、requiredルールで定義している「空」の場合、カスタム拡張したものも含め、通常のバリデーションルールは実行されません。
ってことでどうするか。
Validator::extendImplicit
Validator::extend
だった場所を Validator::extendImplicit
に変更する
Validator::extendImplicit('required_if_xxx_and', function($attribute, $value, $parameters) { // なんらかの処理追加する // 通常のrequired_ifをする $param_required_if = implode(",", $parameters); $result_for_require_if = Validator::make( request()->all(), [$attribute => 'required_if:'.$param_required_if] )->passes(); return $result_for_require_if; }
これでバリデーションがかかるようになります。
ドキュメント
このドキュメントの一番下辺りとか。