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'
     ];
 }

但是,问题是当 typestar_rating 时,我得到一个错误 The body must be at least 6 characters.

这不应该发生,因为正文是可选的,如果 typereview,则只需要用 min:6 验证。我似乎无法弄清楚为什么它运行 min:6 验证,即使 typestar_rating

知道如何让它按预期工作吗?

没有看到你的更多逻辑,我不能确定你想如何进行。但下面的概念应该可以帮助您。

conditionally adds rules根据你定义的参数。在你的情况下,它只需要 body 如果 typereview,并且如果再次 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;
    }