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

时间:2016-04-17 10:42:01

标签: php 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类,但我不知道那是什么错误,为什么会发生?

2 个答案:

答案 0 :(得分:4)

将文件的开头更改为:

namespace App\Http\Requests;

    use App\Http\Requests\Request;
    use Illuminate\Contracts\Validation\Validator;

正如您在错误消息中看到的那样,FormRequest::formatErrors()方法要求$validator param为Illuminate\Contracts\Validation\Validator的实例,但您已导入use Illuminate\Validation\Validator;

答案 1 :(得分:1)

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

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

因此,改变第4行:

use Illuminate\Validation\Validator;

use Illuminate\Contracts\Validation\Validator;