Laravel 5.3 - 最小验证规则和 required_if 问题
Laravel 5.3 - Validation rule min and required_if issue
所以在 Request
中我们有一些验证,其中 type
字段将是 review
,这意味着 body
字段必须至少有 6字符。
public function rules(){
return [
'type' => 'required|in:star_rating,review',
'body' => 'required_if:type,review|min:6'
];
}
但是,问题是当 type
为 star_rating
时,我得到一个错误 The body must be at least 6 characters.
这不应该发生,因为正文是可选的,如果 type
是 review
,则只需要用 min:6
验证。我似乎无法弄清楚为什么它运行 min:6
验证,即使 type
是 star_rating
。
知道如何让它按预期工作吗?
没有看到你的更多逻辑,我不能确定你想如何进行。但下面的概念应该可以帮助您。
它conditionally adds rules根据你定义的参数。在你的情况下,它只需要 body
如果 type
是 review
,并且如果再次 type
也应用 6
个字符的 min
规则是 review
.
use Validator;
// Static rules that don't change
$v = Validator::make($data, [
'type' => 'required|in:star_rating,review'
]);
// Conditional rules that do change
$v->sometimes('body', 'required|min:6', function ($input) {
return $input->type === 'review';
});
// Validator failed? Return back with errors/input
if ($validator->fails()) {
return back()->withErrors($validator)
->withInput();
}
// Proceed however you'd like with request
我遇到了同样的问题,CamelCase 的答案很有效!
但是我不得不将我的验证逻辑放回我的控制器,因为我试图将这个验证逻辑放在 Request
.
中
所以这是另一个在 Request
中使用条件规则的解决方案,它适用于 Laravel 5.4
public function rules()
{
// general rules
$rules = [
'type' => 'required|in:star_rating,review',
];
// conditional rules
if($this->input('type') == 'review'){
$rules['body'] = 'required | min:6';
}
return $rules;
}
所以在 Request
中我们有一些验证,其中 type
字段将是 review
,这意味着 body
字段必须至少有 6字符。
public function rules(){
return [
'type' => 'required|in:star_rating,review',
'body' => 'required_if:type,review|min:6'
];
}
但是,问题是当 type
为 star_rating
时,我得到一个错误 The body must be at least 6 characters.
这不应该发生,因为正文是可选的,如果 type
是 review
,则只需要用 min:6
验证。我似乎无法弄清楚为什么它运行 min:6
验证,即使 type
是 star_rating
。
知道如何让它按预期工作吗?
没有看到你的更多逻辑,我不能确定你想如何进行。但下面的概念应该可以帮助您。
它conditionally adds rules根据你定义的参数。在你的情况下,它只需要 body
如果 type
是 review
,并且如果再次 type
也应用 6
个字符的 min
规则是 review
.
use Validator;
// Static rules that don't change
$v = Validator::make($data, [
'type' => 'required|in:star_rating,review'
]);
// Conditional rules that do change
$v->sometimes('body', 'required|min:6', function ($input) {
return $input->type === 'review';
});
// Validator failed? Return back with errors/input
if ($validator->fails()) {
return back()->withErrors($validator)
->withInput();
}
// Proceed however you'd like with request
我遇到了同样的问题,CamelCase 的答案很有效!
但是我不得不将我的验证逻辑放回我的控制器,因为我试图将这个验证逻辑放在 Request
.
所以这是另一个在 Request
中使用条件规则的解决方案,它适用于 Laravel 5.4
public function rules()
{
// general rules
$rules = [
'type' => 'required|in:star_rating,review',
];
// conditional rules
if($this->input('type') == 'review'){
$rules['body'] = 'required | min:6';
}
return $rules;
}