我遇到了嵌套条件验证规则的问题。
class StoreRequest extends Request
{
public function authorize(){
return true;
}
public function rules(){
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id,==,3|integer',
];
}
}
确实我想: - 仅当type_id等于3时才检查external_id - 并检查它是否为整数。
当我发布表单时,当我选择一个等于3的type_id时,规则会起作用。 但是,如果我选择另一个type_id,如1或2,则验证不会通过:
external_id必须是整数。
我尝试添加可空的条件,但required_if不再起作用
你有什么想法吗?
答案 0 :(得分:4)
您的规则执行两项彼此独立的检查;仅仅因为external_id
!= 3时不需要type_id
字段,并不意味着忽略整数检查。
您正在寻找的是conditional rule,它可让您更好地控制何时执行检查,例如:
$validator = Validator::make($data, [
'type_id' => 'required|integer'
]);
$validator->sometimes('external_id', 'required|integer', function($input) {
return $input->type_id == 3;
});
使用表单验证时,您可以通过覆盖getValidatorInstance()
方法来访问基础验证程序实例:
class StoreRequest extends Request
{
public function authorize(){
return true;
}
public function rules(){
return [
'type_id' => 'required|integer'
];
}
protected function getValidatorInstance() {
$validator = parent::getValidatorInstance();
$validator->sometimes('external_id', 'required|integer', function($input) {
return $input->type_id == 3;
});
return $validator;
}
}
答案 1 :(得分:2)
刚刚遇到同样的问题,发现以下答案似乎对我有用:
issue-using-required-if-validation-rule-in-form-builder
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id,==,3|nullable|integer',
];
我的结果:
字段未填充,类型ID不是3 - 传递
字段未填充,输入id 3 - fail - required field
字段已填充,类型为id 3,非整数 - 整数规则失败
填写字段,输入id 3,整数 - 传递 - 全部好!
注意 - 认为可以为Nullable的规则出现在Laravel 5.3中
答案 2 :(得分:1)
试试这个,
| productId | type | size |P_id
| 123 | container | 20 |123
| 123 | pallet | 50 |123
答案 3 :(得分:0)
试试这个 直接传值 参考:https://www.npmjs.com/package/validatorjs
“required_if:anotherfield,value”
如果 anotherfield 字段等于任何值,则验证中的字段必须存在且不为空。
'type_id' => '必需|整数', 'external_id' => 'required_if:type_i,3|整数',