【问题标题】:Declaration of formatErrors() should be compatible with FormRequest::formatErrors in laravelformatErrors() 的声明应该与 laravel 中的 FormRequest::formatErrors 兼容
【发布时间】:2016-04-17 18:49:21
【问题描述】:

为了在 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)

我认为一切都是正确的,并按照文档说明创建 formrequest 类,但我不知道那个错误是什么以及为什么会发生?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    将文件的开头更改为:

    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;

    【讨论】:

    • 感谢@drndavi,您的解决方案是正确的,但是我如何将 Ajax 表单请求中返回的 Status Code:422 Unprocessable Entity 更改为 OK 200
    • 如果您收到该响应,则很可能提交的数据已被验证器捕获为不符合要求,您需要在前端处理该响应
    • 我向 StoreCourseRequest 类添加了一个响应方法,如下所示:public function response (array $errors) { return response()->json($errors, 200); }
    【解决方案2】:

    错误消息指出您对方法 formatErrors 的声明与您尝试覆盖的父类的声明不兼容。

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

    因此,将 ~4 行从:

    use Illuminate\Validation\Validator;

    use Illuminate\Contracts\Validation\Validator;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2011-04-30
      • 1970-01-01
      • 2017-11-07
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多