Laravel POST 请求 API 接口,使用自定义表单验证,验证失败跳转回首页的问题记录
这个问题是因为 FormRequest
中在验证规则失败时,会调用 failedValidation
方法,该方法的代码:
/**
* Handle a failed validation attempt.
*
* @param \Illuminate\Contracts\Validation\Validator $validator
* @return void
``*
* @throws \Illuminate\Validation\ValidationException
*/
protected function failedValidation(Validator $validator)
{
throw (new ValidationException($validator))
->errorBag($this->errorBag)
->redirectTo($this->getRedirectUrl());// 最终在这里会重定向
}
解决的方法是在自定义的表单验证类重写这个方法。
use Illuminate\Http\JsonResponse;
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Http\Exceptions\HttpResponseException;
.
.
.
protected function failedValidation(Validator $validator)
{
$error= $validator->errors()->all();
throw new HttpResponseException($this->fail(400, $error));
}
protected function fail(int $code, array $errors) : JsonResponse
{
return response()->json(
[
'code' => $code,
'errors' => $errors,
]
);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
你发送的post请求是ajax请求么,还是普通的form提交? 看你这应该是普通的form提交
@jaak form表单提交,没使用 ajax
使用 AJAX 来发送请求时,Laravel 并不会生成一个重定向响应,而是会生成一个包含所有验证错误信息的 JSON 响应。这个 JSON 响应会包含一个 HTTP 状态码 422 被发送出去
@jaak ok,感谢
真棒