为了在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类,但我不知道那是什么错误,为什么会发生?
答案 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;