Laravel 5.3-验证规则最小值和所需值(如有问题)

Laravel 5.3-验证规则最小值和所需值(如有问题),laravel,laravel-5,laravel-5.3,Laravel,Laravel 5,Laravel 5.3,因此,在请求中,我们进行了一些验证,类型字段将是审阅,这意味着正文字段必须至少有6个字符 public function rules(){ return [ 'type' => 'required|in:star_rating,review', 'body' => 'required_if:type,review|min:6' ]; } 但是,问题是当类型为星级时,我得到一个错误,正文必须至少包含6个字符。 这不应该发生,因为主体是

因此,在
请求
中,我们进行了一些验证,
类型
字段将是
审阅
,这意味着
正文
字段必须至少有6个字符

public function rules(){
     return [
       'type' => 'required|in:star_rating,review',
       'body' => 'required_if:type,review|min:6'
     ];
 }
但是,问题是当
类型
星级
时,我得到一个错误,
正文必须至少包含6个字符。

这不应该发生,因为主体是可选的,并且只有在
类型
审核时才需要并使用
min:6
进行验证。我似乎不明白为什么它会对它运行
min:6
验证,即使
type
star\u rating


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

如果不了解你的逻辑,我无法确定你想如何继续。但是下面的概念应该会让你开始

它将根据您定义的参数进行设置。在您的情况下,如果
类型
审阅
,则只需要
正文
,如果
类型
审阅
,则还应用
最小
规则

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的答案很好! 但我必须将验证逻辑放回控制器,因为我试图将此验证逻辑放回
请求中

下面是另一个在Laravel5.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;
    }

如果
只应用了
required
规则,而不是
min
规则,我想这可能是由于
required\u造成的。似乎您也希望忽略
min
规则,如果
不适用,则该规则是
必需的。您可能正在寻找允许您在给定条件为真时定义
(有时
)。查看上面链接中基于
关闭的验证,它将处理您需要的!我对如何将链接中的代码集成到
请求
中有点困惑,该请求有两个标准功能
authorize
rules
知道如何正确地将其集成到
请求
中吗?添加了一个应该有帮助的答案,太多了,无法输入注释。希望有帮助!您好,我有完全相同的问题(在laravel 5.4中),我在文档和您的回答中都不理解的是:将此代码放在哪里?是否在FormRequest文件中?正如旺卡所说,它只有两种方法,
授权
规则
,我不知道如何在其中一种方法中实现这一点,是在我的控制器中吗?如果是的话,这有点烦人,因为我正在重构我的控制器,以便将验证过程放入请求中。