【问题标题】:Laravel API receive JSON 404 not foundLaravel API 收到 JSON 404 未找到
【发布时间】: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.phproutes/api.php 中,这将取决于哪个中间件正在处理请求。看来web.phpyou 还没有定义端点。
  • 用路由信息编辑了原帖
  • 你有别名ModelNotFoundException 吗?
  • 不确定别名到底是什么意思。但我在 Exceptions>Handler.php 中捕获了 ModelNotFoundException
  • 您是否为该类设置了别名,以便可以在当前文件中使用该短名称来使用它? Illuminate\Database\Eloquent\ModelNotFoundException

标签: php laravel


【解决方案1】:

确保为您正在检查的异常类设置别名。

use Illuminate\Database\Eloquent\ModelNotFoundException;

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

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 2020-10-26
    • 1970-01-01
    • 2021-03-21
    • 2019-10-20
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多