Laravel Route 模型绑定抛出 NotFoundHttpException 而不是 ModelNotFoundException

Laravel Route model binding throws NotFoundHttpException instead of ModelNotFoundException

提问人:Vüsal Hüseynli 提问时间:5/29/2023 最后编辑:Vüsal Hüseynli 更新时间:5/29/2023 访问量:129

问:

我正在对我的 API 路由使用路由模型绑定。

Route::middleware('client')->group(function(){
    Route::get('/documents/{document}', [DocumentController::class, 'get']);
    Route::apiResource('documents', DocumentController::class)->only('store', 'destroy');
    Route::post('filter', [DocumentController::class, 'filter']);
});

文档控制器:

public function get(Document $document): JsonResponse|string|null
{
    // do some stuff

    return response()->json([
        'code' => 404,
        "message" => "Some Message"
    ], 404);
}

当我访问我的 API 路由 ( - ) 时,数据库中存在的有效路由一切正常。但是,如果我用 DB 中不存在的 invalid 调用它,它会抛出异常:GET/api/documents/$uuid$uuid$uuid

"message": "No query results for model [App\\Models\\Document] some_uuid_here",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",

问题抛出异常是,而它应该是.NotFoundHttpExceptionModelNotFoundException

如果路由完全未定义,应该不需要被抛出吗? 我不想在有实际路由时向用户显示,但不想使用给定的键进行记录。NotFoundHttpExceptionRoute not definedprimary


我包围在try捕获块中只是为了调试异常甚至抛出Document::findOrFail($value);findOrFailNotFoundHttpException

try {
    Document::findOrFail($value);
}catch (\Exception $exception){
    throw $exception;
}

enter image description here

try {
    Document::findOrFail($value);
}catch (\Exception $exception){
    echo get_class($exception);
}

enter image description here

php laravel 异常 route-model-binding

评论

1赞 lagbox 5/29/2023
它正在抛出一个......然后,异常处理程序将它转换为另一个异常......ModelNotFoundException$e instanceof ModelNotFoundException => new NotFoundHttpException($e->getMessage(), $e),
0赞 Vüsal Hüseynli 5/29/2023
@lagbox在哪里?我没有在异常处理程序中自定义任何内容
1赞 lagbox 5/29/2023
呵呵,显然这不是你正在做的事情,它是默认完成的,否则我不会有代码来显示它......我不知道你想对这个例外做什么,但你必须在处理程序中做一些事情来处理它
1赞 lagbox 5/29/2023
不,不会抛出那个异常,它会抛出一个......从方法开始:......也直接从源代码 github.com/laravel/framework/blob/...findOrFailModelNotFoundExceptionfindOrfailthrow (new ModelNotFoundException)
0赞 Vüsal Hüseynli 5/29/2023
@lagbox 两者兼而有之,被同一个班级扔掉?那我怎么知道是什么导致了问题。我需要自定义异常消息Route not definedRecord not found

答: 暂无答案