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