Php Laravel 6自定义验证错误';类不存在';重写FormRequest时';s失败验证方法

Php Laravel 6自定义验证错误';类不存在';重写FormRequest时';s失败验证方法,php,laravel,laravel-validation,laravel-6,laravel-response,Php,Laravel,Laravel Validation,Laravel 6,Laravel Response,我在app\Http\Requests中创建了一个自定义验证类: <?php namespace App\Http\Requests; use App\Http\Requests\BaseFormRequest; class RegisterUserRequest extends BaseFormRequest { protected static $NEEDS_AUTHORIZATION = false; protected static $FORM_RULES

我在
app\Http\Requests
中创建了一个自定义验证类:

<?php

namespace App\Http\Requests;

use App\Http\Requests\BaseFormRequest;

class RegisterUserRequest extends BaseFormRequest
{
    protected static $NEEDS_AUTHORIZATION = false;

    protected static $FORM_RULES = [
        'first_name'              => 'required|string|max:80',
        'last_name'               => 'required|string|max:80',
        'email'                   => 'required|unique:users|email',
        'password'                => 'required|string|min:6|confirmed',
        'terms_conditions'        => 'accepted'
    ];

}
现在,在我的控制器中尝试使用它时:

<?php

namespace App\Http\Controllers\API;

use App\Services\UserService;
use Illuminate\Http\JsonResponse as JsonResponse;
//use Iluminate\Http\Request;
use App\Http\Requests\RegisterUserRequest;

class UserController extends Controller
{
    private $user;

    public function __construct(UserService $user)
    {
        $this->user = $user;
    }

    public function store(RegisterUserRequest $request) : JsonResponse
    {   
        $registered_user = $this->user->register($request->validated());

        return response()->json(['status' => 201, 'user_id' => $registered_user->id]);
    }

}

请注意,
failedValidation()
函数需要一个
\light\Contracts\Validation\Validator
的实例作为参数:

/**
* ...
* @param  \Illuminate\Contracts\Validation\Validator  $validator
* ...
*/ 
但是您正在传递一个
illumb\Validation\Validator
实例:

use Illuminate\Validation\Validator; 

protected function failedValidation(Validator $validator) : void
{
    throw new HttpResponseException(response()->json($validator->errors(), 422));
}
所以,你可以改变

use Illuminate\Validation\Validator; 

或者将其与参数中的命名空间一起传递:

protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator) : void
{
    throw new HttpResponseException(response()->json($validator->errors(), 422));
}

请注意,
failedValidation()
函数需要一个
\light\Contracts\Validation\Validator
的实例作为参数:

/**
* ...
* @param  \Illuminate\Contracts\Validation\Validator  $validator
* ...
*/ 
但是您正在传递一个
illumb\Validation\Validator
实例:

use Illuminate\Validation\Validator; 

protected function failedValidation(Validator $validator) : void
{
    throw new HttpResponseException(response()->json($validator->errors(), 422));
}
所以,你可以改变

use Illuminate\Validation\Validator; 

或者将其与参数中的命名空间一起传递:

protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator) : void
{
    throw new HttpResponseException(response()->json($validator->errors(), 422));
}

您是否运行composer dump autoload?我刚刚运行了,与arg相同的结果是
illumb\Contracts\Validation\Validator
而不是
illumb\Validation\Validator
,这确实是问题所在。谢谢!是否要将其添加为答案,以便我可以将其标记为正确答案?是否运行composer dump autoload?我刚刚运行了,结果与
illible\Contracts\Validation\Validator
相同,而不是
illible\Validation\Validator
为arg。这确实是问题所在。谢谢!是否要将其添加为答案,以便我可以将其标记为正确答案?