具有其他条件 (Laravel 5.4) 的验证规则 required_if
Validation rules required_if with other condition (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',
];
}
}
我确实想:
- 仅当 type_id 等于 3 时检查 external_id
- 并检查它是否为整数。
当我 post 我的表格时,规则在我 select a type_id 等于 3 时起作用。
但是如果我 select 另一个 type_id,比如 1 或 2,验证不会通过:
The external_id must be an integer.
我尝试添加可为 null 的条件,但 required_if 不再起作用
你有什么想法吗?
您的规则执行两项相互独立的检查;只是因为 external_id
字段在 type_id
!= 3 时不需要,并不意味着忽略整数检查。
您正在寻找的是 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;
}
}
试试这个,
class StoreRequest extends Request
{
public function authorize(){
return true;
}
public function rules(){
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id|in:3|integer',
];
}
}
刚遇到同样的问题,发现以下答案似乎对我有用:
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 - 失败 - 必填字段
已填充字段,类型 id 3,非整数 - 不符合整数规则
填充字段,类型 id 3,整数 - 通过 - 一切正常!
注意 - 认为可以为空的规则出现了 Laravel 5.3
试试这个
直接传值
参考:https://www.npmjs.com/package/validatorjs
"required_if:另一个字段,值"=19=]
如果另一个字段字段等于任何值,则验证字段必须存在且不能为空。
'type_id' => 'required|integer',
'external_id' => 'required_if:type_i,3|integer',
我遇到了嵌套条件验证规则的问题。
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 - 并检查它是否为整数。
当我 post 我的表格时,规则在我 select a type_id 等于 3 时起作用。 但是如果我 select 另一个 type_id,比如 1 或 2,验证不会通过:
The external_id must be an integer.
我尝试添加可为 null 的条件,但 required_if 不再起作用
你有什么想法吗?
您的规则执行两项相互独立的检查;只是因为 external_id
字段在 type_id
!= 3 时不需要,并不意味着忽略整数检查。
您正在寻找的是 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;
}
}
试试这个,
class StoreRequest extends Request
{
public function authorize(){
return true;
}
public function rules(){
return [
'type_id' => 'required|integer',
'external_id' => 'required_if:type_id|in:3|integer',
];
}
}
刚遇到同样的问题,发现以下答案似乎对我有用:
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 - 失败 - 必填字段
已填充字段,类型 id 3,非整数 - 不符合整数规则
填充字段,类型 id 3,整数 - 通过 - 一切正常!
注意 - 认为可以为空的规则出现了 Laravel 5.3
试试这个 直接传值 参考:https://www.npmjs.com/package/validatorjs
"required_if:另一个字段,值"=19=]
如果另一个字段字段等于任何值,则验证字段必须存在且不能为空。
'type_id' => 'required|integer',
'external_id' => 'required_if:type_i,3|integer',