kes*_*sm0 6 php validation validationrules laravel laravel-5.4
我对带有嵌套条件的验证规则有疑问。
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',
];
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,我想:-仅在type_id等于3时检查external_id-并检查它是否为整数。
发布表单时,当我选择等于3的type_id时,规则将起作用。但是,如果我选择另一个type_id(如1或2),则验证不会通过:
external_id必须为整数。
我尝试添加可为空的条件,但required_if不再起作用
你有什么主意吗?
刚遇到相同的问题,发现以下答案似乎对我有用:
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id,==,3|nullable|integer',
];
Run Code Online (Sandbox Code Playgroud)
对我的结果:
字段未填充,输入的ID不是3-通过
字段未填充,输入ID 3-失败-必填字段
填充的字段,类型ID 3,非整数-整数规则失败
填充字段,输入ID 3,整数-通过-一切都很好!
注意-Laravel 5.3中引入了可为空的规则
您的规则执行两项相互独立的检查;仅因为external_id当type_id!= 3 时不需要该字段,并不意味着忽略整数检查。
您正在寻找的是条件规则,它使您可以更好地控制何时执行检查,例如:
$validator = Validator::make($data, [
'type_id' => 'required|integer'
]);
$validator->sometimes('external_id', 'required|integer', function($input) {
return $input->type_id == 3;
});
Run Code Online (Sandbox Code Playgroud)
使用表单验证时,可以通过重写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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8016 次 |
| 最近记录: |