Laravel API收到未找到JSON 404

时间:2018-08-13 13:28:24

标签: php laravel

我正在开发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');

实现此目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

请确保为要检查的异常类添加别名。

use Illuminate\Database\Eloquent\ModelNotFoundException;

没有这个,您要检查App\Exceptions\ModelNotFoundException的实例。