Laravel:转换JSON响应数据

时间:2016-02-02 16:49:22

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

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

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

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

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

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

我读过有关使用响应宏,响应工厂,中间件,分形库等的信息

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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