异常捕获问题
当前使用的 Laravel 版本?
11.23.2
问题描述?
数据不存在时,异常捕获有问题
路由:
Route::get('/articles/{article}',[ArticleController::class,'detail']);
控制器:
public function detail(Article $article)
{
return $this->success($article);
}
/bootstrap/app.php 中的异常处理
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (ModelNotFoundException $e) {
return response()->json(['code' => 404, 'msg' => '数据未找到']);
});
$exceptions->render(function (HttpException $e) {
return response()->json(['code' => 501, 'msg' => $e->getMessage()]);
});
$exceptions->render(function (NotFoundHttpException $e) {
return response()->json(['code' => 404, 'msg' => '路由不存在']);
});
})
疑惑
如果文章不存在,
ModelNotFoundException捕获不到,
HttpException、NotFoundHttpException可以捕获到,顺序在前的捕获到
正常不应该被 ModelNotFoundException 捕获到吗?
此外,laravel11异常捕获怎么处理比较好?现在是每个异常类加一个render
ModelNotFoundException
是可以捕获到的。你所说的 "文章不存在" 是否用了
fail
?大部分异常你都不需要捕获,因为对业务没啥用。
這個是route做的處理 文章不存在的時候 這個route找不到 就會拋出路由找不到的異常
看文档 路由-隐式绑定
如果自定义异常,看 问答:路由隐式绑定 ,使用依赖注入 如果在数据库中找不到对应的模型实例...
我看了laravel10和laravel11
如果是ModelNotFoundException 都會被轉換成NotFoundHttpException
然後才會走到你定義renderable
你確定你的laravel10能抓到ModelNotFoundException異常嗎