【发布时间】:2019-01-20 06:05:55
【问题描述】:
我正在开发一个 Laravel 5.6 API,我正在使用资源和集合、路由模型绑定。
为了显示一个项目,我目前在我的控制器中使用以下代码:
public function show(Todo $todo)
{
TodoResource::withoutWrapping();
return new TodoResource($todo);
}
在 Exceptions > Handler.php 我有以下内容:
public function render($request, Exception $exception)
{
// This will replace our 404 response with
// a JSON response.
if ($exception instanceof ModelNotFoundException) {
return response()->json([
'error' => 'Resource not found'
], 404);
}
return parent::render($request, $exception);
}
当在数据库中找到该项目时,这非常有效。如果该项目不在数据库中,我会得到一个(使用浏览器时):
"Sorry, the page you are looking for could not be found"
当使用 POSTMAN 休息客户端时,我得到了
{
"message": "No query results for model [App\\Todo].",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException",
....
....
我想简单地使用浏览器或 POSTMAN 检索带有文本“找不到资源”的 404 错误。
* 使用路由信息更新 *
在我的 api.php 中,我有以下内容:
Route::apiResource('todos', 'TodoController');
Route::fallback(function () {
return response()->json(['message' => 'Not Found!'], 404);
});
在 web.php 中,我有:
Route::Resource('todos', 'TodoController');
实现这一目标的最佳方法是什么?
【问题讨论】:
-
您如何路由端点?在
routes/web.php和routes/api.php中,这将取决于哪个中间件正在处理请求。看来web.phpyou 还没有定义端点。 -
用路由信息编辑了原帖
-
你有别名
ModelNotFoundException吗? -
不确定别名到底是什么意思。但我在 Exceptions>Handler.php 中捕获了 ModelNotFoundException
-
您是否为该类设置了别名,以便可以在当前文件中使用该短名称来使用它?
Illuminate\Database\Eloquent\ModelNotFoundException