Laravel - Ошибка «Аргумент 2, передаваемый в Illuminate \ Validation \ Factory :: make (), должен иметь тип массива, заданный объект» - PullRequest
0 голосов
/ 24 января 2019

Что не так с этим кодом?

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);
    }

}

Ошибка, которую я получаю:

Аргумент 2, передаваемый в Illuminate \ Validation \ Factory :: make (), должен иметь тип массива, объект задан

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Ваша 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..
}
0 голосов
/ 24 января 2019

Вы возвращаете неправильное значение из самого метода rules, вы должны вернуть array containing your validation rules вместо Validation::make:

public function rules() {
    ...

    return $rules;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...