Laravel:转换 JSON 响应数据


Laravel: Transform JSON response data

目前,我返回的数据如下(基本示例):

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

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

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

成功价值将像statusCode == 200一样简单。

我已经读过关于使用响应宏、响应工厂、中间件之后、分形库等的信息

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

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

谢谢。

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

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

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

您可以使用分形包来实现这一点。然后,您可以通过转换器运行响应并获得正确的响应。这是它的包。https://packagist.org/packages/league/fractal