我正在开发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 rest client时,我得到
{
"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');
实现此目标的最佳方法是什么?
答案 0 :(得分:1)
请确保为要检查的异常类添加别名。
use Illuminate\Database\Eloquent\ModelNotFoundException;
没有这个,您要检查App\Exceptions\ModelNotFoundException
的实例。