在Laravel 5中如何实现请求字段的条件校验?
解法1:使用Rule::when 直接在规则数组中声明(推荐)
这是最简写法,适配Laravel 5.4及以上版本,需要先引入Rule门面:
use Illuminate\Validation\Rule; $rules = [ 'carType' => 'string', 'additionalFields' => [ 'required_if:carType,truck,caravan', // 仅当carType为truck时追加数组校验 Rule::when(request()->input('carType') === 'truck', ['array']), ], ];
解法2:使用验证器的when方法动态加规则
如果是旧版本Laravel,或者需要更复杂的条件判断,可以用这种方式:
// 先定义基础规则 $rules = [ 'carType' => 'string', 'additionalFields' => 'required_if:carType,truck,caravan', ]; // 初始化验证器 $validator = Validator::make($request->all(), $rules); // 满足条件时追加数组校验 $validator->when($request->input('carType') === 'truck', function ($validator) { $validator->addRules(['additionalFields' => 'array']); });
解法3:自定义闭包校验
如果不想引入Rule门面,也可以直接写闭包规则:
$rules = [ 'carType' => 'string', 'additionalFields' => [ 'required_if:carType,truck,caravan', function ($attribute, $value, $fail) { if (request('carType') === 'truck' && !is_array($value)) { $fail("{$attribute} 当车辆类型为卡车时必须为数组"); } } ], ];
如果后续需要校验数组内部的字段结构,可以在array规则后面追加array.*相关的子字段校验规则即可。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

