【问题标题】:Laravel: Transform JSON response dataLaravel:转换 JSON 响应数据
【发布时间】:2016-05-11 14:17:42
【问题描述】:

目前,我正在返回这样的数据(基本示例):

public function index()
{
    return User::all();
}

但是,我想用一些额外的元数据包装我的回复,使它们看起来像:

{
    'success': true,
    'data': {
       ... // Normal response
     }
}

成功值将是简单的statusCode == 200

我读过关于使用响应宏、响应工厂、中间件之后、分形库等的文章

理想情况下,它适用于所有响应,例如返回 Eloquent 模型和集合,以及 Response::json($data)

在 Laravel 5.2 时代,实现这一目标的最佳/正确方法是什么?

谢谢。

【问题讨论】:

    标签: php json laravel laravel-5 laravel-routing


    【解决方案1】:

    您可以为此使用分形包。然后您可以通过转换器运行响应并获得正确的响应。这是那个包。 https://packagist.org/packages/league/fractal

    【讨论】:

    • 我想要一个基本上说“如果响应类型是 json,用 this 包装它”的解决方案,而不是必须手动更改每个响应
    • 当然,但这就是变形金刚的用途。我认为你的方法在 Laravel 中是不可能的......也许我错了:D
    【解决方案2】:

    如果您正在为 Laravel 开发 API,我建议您查看 Dingo。它是开发 API 最有用的软件包之一。 Dingo 使用分形来转换响应。在您的应用程序中添加此类元数据,您可以使用Transformers in Dingo。您还可以收听和修改数据的许多事件。在您的特定示例中,ResponseWasMorphed 将是您要收听的事件之一。

    如果您想在不添加外部包的情况下继续您的项目,您可以覆盖 BaseController 中的 response() 方法,该方法可以检查并添加所需的内容。

    public function response($data, $status)
    {
        //calculate parameter based on $status
        $success = ...
        return response(array_merge($data, ['success' => $success]));
    }
    

    【讨论】:

    • 谢谢,我希望避免更多的依赖,因为 Dingo 确实非常适合这个和其他我需要的东西。如果没有,您的其他解决方案应该可以解决问题。
    • 其实这不会自动包装Response::json()并返回Eloquent模型
    • 如果你使用门面,它不会。
    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 2016-09-06
    • 2017-09-23
    • 1970-01-01
    • 2020-12-19
    相关资源
    最近更新 更多