【问题标题】:Laravel - Error "Argument 2 passed to Illuminate\Validation\Factory::make() must be of the type array, object given"Laravel - 错误“传递给 Illuminate\Validation\Factory::make() 的参数 2 必须是数组类型,给定对象”
【发布时间】:2019-06-17 23:24:51
【问题描述】:

这段代码有什么问题?

class DeleteDetail extends FormRequest {

    public function authorize() {
        return true;
    }

    public function rules() {
        $request = Request::all();
        $rules = [
            'hobby' => [
                'string',
                'between:3,20',
                Rule::exists('user_hobby')->where(function ($query) use ($request) {
                    $query->where('hobby', $request['hobby'])->where('user_id', Auth::user()->id);
                }),
            ],
        ];

        return Validator::make($request, $rules);
    }

}

我遇到的错误:

传递给 Illuminate\Validation\Factory::make() 的参数 2 必须是数组类型,给定对象

【问题讨论】:

  • 您是否尝试创建请求验证类?

标签: laravel validation


【解决方案1】:

您从 rules 方法本身返回了错误的值,您应该返回 array containing your validation rules 而不是 Validation::make

public function rules() {
    ...

    return $rules;
}

【讨论】:

    【解决方案2】:

    您的 rules 函数应返回包含规则的数组。

    public function rules() {
        $request = Request::all();
        $rules = [
            'hobby' => [
                    'string',
                    'between:3,20',
                    Rule::exists('user_hobby')->where(function ($query) use ($request) {
                        $query->where('hobby', $request['hobby'])->where('user_id', Auth::user()->id);
                    }),
                ],
            ];
    
        return $rules;
    }
    

    然后在你的控制器中:

    public function store(DeleteDetail $request) 
    {
       // the code in here has passed the validation..
    }
    

    【讨论】:

    • 感谢您的帮助。
    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多