异常捕获问题

当前使用的 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
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12

ModelNotFoundException 是可以捕获到的。

你所说的 "文章不存在" 是否用了 fail?

Article::findOrFail(9 * 10000)

大部分异常你都不需要捕获,因为对业务没啥用。

5个月前 评论
laravel_v (楼主) 5个月前
lyxxxh (作者) 5个月前

這個是route做的處理 文章不存在的時候 這個route找不到 就會拋出路由找不到的異常

5个月前 评论
laravel_v (楼主) 5个月前

看文档 路由-隐式绑定

如果没有找到数据库中匹配的模型实例,将自动生成 404 HTTP 响应。

如果自定义异常,看 问答:路由隐式绑定 ,使用依赖注入 如果在数据库中找不到对应的模型实例...

5个月前 评论
laravel_v (楼主) 5个月前
php_yt (作者) 5个月前

file
file

我看了laravel10和laravel11
如果是ModelNotFoundException 都會被轉換成NotFoundHttpException

然後才會走到你定義renderable
你確定你的laravel10能抓到ModelNotFoundException異常嗎

5个月前 评论
laravel_v (楼主) 5个月前
cccdz (作者) 5个月前
laravel_v (楼主) 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!