formatErrors()的声明应与laravel中的FormRequest::formatErrors兼容


Declaration of formatErrors() should be compatible with FormRequest::formatErrors in laravel

为了在laravel中使用Form Request Validation,我创建了一个StoreCourseRequest类,如下所示:

namespace App'Http'Requests;
    use App'Http'Requests'Request;
    use Illuminate'Validation'Validator;
class StoreCourseRequest extends Request
    {
        public function authorize ()
        {
            return true;
        }
        public function rules ()
        {
            return [
                'title'       => 'required',
                'description' => 'required'
            ];
        }
        public function messages ()
        {
            return [
                'title.required'       => 'عنوان دوره را وارد کنید',
                'description.required' => 'توضیحات دوره را وارد کنید',
            ];
        }

        protected function formatErrors(Validator $validator)
        {
            $result = ['success' => false, 'msg' => $validator->errors()->first()];
return $result;
            }
        }

因为所有请求都是以Ajax的形式发送的,所以我想自定义错误消息的格式,正如您在上面的代码中看到的那样。

但在发送请求后,出现以下错误:

ErrorException in StoreCourseRequest.php line 9:
Declaration of App'Http'Requests'StoreCourseRequest::formatErrors() should be compatible with Illuminate'Foundation'Http'FormRequest::formatErrors(Illuminate'Contracts'Validation'Validator $validator)

我认为一切都是正确的,并按照docs的指示创建formrequest类,但我不知道那个错误是什么,为什么会发生?

将文件的开头更改为:

namespace App'Http'Requests;
    use App'Http'Requests'Request;
    use Illuminate'Contracts'Validation'Validator;

正如您在错误消息中看到的,FormRequest::formatErrors()方法要求$validator参数是Illuminate'Contracts'Validation'Validator的实例,但您已经导入了use Illuminate'Validation'Validator;

错误消息指出方法formatErrors的声明与试图重写的父类的声明不兼容。

您将Illuminate'Validation'Validator别名为Validator,但该方法需要类型为Illuminate'Contracts'Validation'Validator的验证器。尝试更改导入的Validator类。

因此,将第~4行从:更改为

use Illuminate'Validation'Validator;

use Illuminate'Contracts'Validation'Validator;