基于来自 FormRequest rules() 方法的另一个输入值的不同输入验证规则
Different validation rules for input based on another input value from FormRequest rules() method
是否可以根据另一个输入的值有条件地验证输入字段?
例如,输入 type
的值可以是 letters
或 numbers
,然后还有另一个字段包含 value
输入。
我希望 value
输入验证规则在类型为 letters
时为 alpha
,在类型为 numbers
[=21= 时为 numeric
]
我已经在 rules
方法中使用管道验证类型:
public function rules()
{
return [
"type" => 'required',
"value" => 'required|min:1|max:255',
];
}
您可以使用 Rule::when($condition, $rules)
.
<?php
use Illuminate\Validation\Rule;
public function rules()
{
return [
'type' => ['required'],
'value' => [
'required',
'min:1',
'max:255',
Rule::when($this->type === 'letters', ['alpha']),
Rule::when($this->type === 'numbers', ['numeric']),
],
];
}
请检查Complex Conditional Validation,它是您请求的解决方案。文档中已经给出了一个示例,但是您的代码块将如下所示。
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'type' => 'required',
]);
$validator->sometimes('value', 'required|min:1|max:255|numeric', function ($input) {
return $input->type == 'numbers';
});
$validator->sometimes('value', 'required|min:1|max:255|alpha', function ($input) {
return $input->type == 'letters';
});
是否可以根据另一个输入的值有条件地验证输入字段?
例如,输入 type
的值可以是 letters
或 numbers
,然后还有另一个字段包含 value
输入。
我希望 value
输入验证规则在类型为 letters
时为 alpha
,在类型为 numbers
[=21= 时为 numeric
]
我已经在 rules
方法中使用管道验证类型:
public function rules()
{
return [
"type" => 'required',
"value" => 'required|min:1|max:255',
];
}
您可以使用 Rule::when($condition, $rules)
.
<?php
use Illuminate\Validation\Rule;
public function rules()
{
return [
'type' => ['required'],
'value' => [
'required',
'min:1',
'max:255',
Rule::when($this->type === 'letters', ['alpha']),
Rule::when($this->type === 'numbers', ['numeric']),
],
];
}
请检查Complex Conditional Validation,它是您请求的解决方案。文档中已经给出了一个示例,但是您的代码块将如下所示。
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'type' => 'required',
]);
$validator->sometimes('value', 'required|min:1|max:255|numeric', function ($input) {
return $input->type == 'numbers';
});
$validator->sometimes('value', 'required|min:1|max:255|alpha', function ($input) {
return $input->type == 'letters';
});