Laravel 9中required_if验证规则失效问题求助
问题原因
你的required_if规则参数与stripped的实际取值不匹配:
- 复选框选中时,
$this->stripped输出true(布尔值) - 未选中时输出
0(整数)
而你使用的required_if:stripped,accepted是判断stripped是否等于字符串'accepted',这和实际取值完全不匹配,导致规则逻辑错误,出现不符合预期的验证行为。
解决方案
根据stripped的实际取值,有两种修复方式:
方式一:直接修改验证规则
把规则里的accepted改成stripped选中时的实际值(true或1):
protected $rules = [ 'car_color' => 'required|string', // 匹配选中时的true值 'new_weight' => 'required_if:stripped,true|integer|min:1|max:999', // 如果stripped实际存储的是整数1,就改成下面的写法 // 'new_weight' => 'required_if:stripped,1|integer|min:1|max:999', ];
方式二:用闭包规则实现更灵活的判断(推荐)
如果stripped的取值存在混合情况(比如同时出现true/0),可以用闭包自定义验证逻辑,兼容性更强:
protected $rules = [ 'car_color' => 'required|string', 'new_weight' => [ 'integer', 'min:1', 'max:999', function ($attribute, $value, $fail) { // 只要stripped为真(true/1)且new_weight为空,就触发验证错误 if ($this->stripped && empty($value)) { $fail('New Weight Value is required when stripped is checked.'); } }, ], ];
额外优化:拆分验证提示信息
你当前的$messages中,new_weight的提示会覆盖所有验证场景,建议拆分后让提示更精准:
protected $messages = [ 'car_color.required' => 'Please enter car color.', 'new_weight.required_if' => 'New Weight Value is required when stripped is checked.', 'new_weight.integer' => 'New Weight Value must be an integer.', 'new_weight.min' => 'New Weight Value must be greater than 1.', 'new_weight.max' => 'New Weight Value must be less than 999.', ];
内容的提问来源于stack exchange,提问作者Charles Smith
相关产品推荐
相关产品推荐

