Php formatErrors()的声明应与laravel中的FormRequest::formatErrors兼容
为了在laravel中使用,我创建了一个StoreCourseRequest类,如下所示:Php formatErrors()的声明应与laravel中的FormRequest::formatErrors兼容,php,laravel,Php,Laravel,为了在laravel中使用,我创建了一个StoreCourseRequest类,如下所示: namespace App\Http\Requests; use App\Http\Requests\Request; use Illuminate\Validation\Validator; class StoreCourseRequest extends Request { public function authorize () {
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类,但我不知道该错误是什么以及为什么会发生?错误消息指出,您对方法
formatErrors
的声明与您试图覆盖的父类的声明不兼容
您正在将illumb\Validation\Validator
别名为Validator
,但该方法需要类型为illumb\Contracts\Validation\Validator
的验证器。尝试更改导入的验证程序
类
因此,将第4行更改为:
使用light\Validation\Validator代码>
到
使用light\Contracts\Validation\Validator代码>将文件开头更改为:
namespace App\Http\Requests;
use App\Http\Requests\Request;
use Illuminate\Contracts\Validation\Validator;
正如您在错误消息中所看到的,FormRequest::formatErrors()
方法要求$validator
param作为illumb\Contracts\Validation\validator
的实例,但是您已经导入了使用illumb\Validation\validator
谢谢@drndavi,您的解决方案是正确的,但是我如何才能在Ajax表单请求中将返回的状态代码:422个不可处理实体
更改为OK 200
。如果您得到响应,那么提交的数据很可能被验证程序发现不符合要求,您需要在frontendI中处理该响应。我向StoreCourseRequest类添加了一个响应方法,如下所示:public function response(array$errors){return response()->json($errors,200);}