laravel 5.1 中的异常未捕获表单验证异常?
form validation exception not catching by Exception in laravel 5.1?
在 laravel5 中,我捕获了 app/Exceptions/Handler@render
函数中的所有错误并且它工作正常。
下面给出的代码,
public function render($request, Exception $e) {
$error_response['error'] = array(
'code' => NULL,
'message' => NULL,
'debug' => NULL
);
if ($e instanceof HttpException && $e->getStatusCode() == 422) {
$error_response['error']['code'] = 422;
$error_response['error']['message'] = $e->getMessage();
$error_response['error']['debug'] = null;
return new JsonResponse($error_response, 422);
}
}
return parent::render($request, $e);
}
但在laravel5.1中,当表单验证失败时,它会抛出错误消息并出现422
异常。但它没有从 app/Exceptions/Handler@render
捕获,但与 abort(422)
.
一起工作正常
我该如何解决这个问题?
当表单请求无法验证您的数据时,它会触发 failedValidation(Validator $validator)
方法,该方法抛出 HttpResponseException
和新的重定向响应,而不是 HttpException
。此异常通过 Laravel 路由器在其 run(Request $request)
方法中捕获,并获取响应并触发它。所以你没有任何机会通过你的异常处理程序来处理它。
但是如果您想更改此行为,您可以在您的抽象请求或任何其他请求中覆盖 failedValidation
方法 class 并抛出您将在处理程序中处理的您自己的异常。
或者您可以直接覆盖 response(array $errors)
并创建您自己的响应,该响应将由路由器自动处理。
你可以简单地做
public function render($request, Exception $e) {
if($e instanceof ValidationException) {
// Your code here
}
}
在 laravel5 中,我捕获了 app/Exceptions/Handler@render
函数中的所有错误并且它工作正常。
下面给出的代码,
public function render($request, Exception $e) {
$error_response['error'] = array(
'code' => NULL,
'message' => NULL,
'debug' => NULL
);
if ($e instanceof HttpException && $e->getStatusCode() == 422) {
$error_response['error']['code'] = 422;
$error_response['error']['message'] = $e->getMessage();
$error_response['error']['debug'] = null;
return new JsonResponse($error_response, 422);
}
}
return parent::render($request, $e);
}
但在laravel5.1中,当表单验证失败时,它会抛出错误消息并出现422
异常。但它没有从 app/Exceptions/Handler@render
捕获,但与 abort(422)
.
我该如何解决这个问题?
当表单请求无法验证您的数据时,它会触发 failedValidation(Validator $validator)
方法,该方法抛出 HttpResponseException
和新的重定向响应,而不是 HttpException
。此异常通过 Laravel 路由器在其 run(Request $request)
方法中捕获,并获取响应并触发它。所以你没有任何机会通过你的异常处理程序来处理它。
但是如果您想更改此行为,您可以在您的抽象请求或任何其他请求中覆盖 failedValidation
方法 class 并抛出您将在处理程序中处理的您自己的异常。
或者您可以直接覆盖 response(array $errors)
并创建您自己的响应,该响应将由路由器自动处理。
你可以简单地做
public function render($request, Exception $e) {
if($e instanceof ValidationException) {
// Your code here
}
}