Laravel:转换JSON响应数据
Laravel: Transform JSON response data
目前,我正在返回这样的数据(基本示例):
public function index()
{
return User::all();
}
但是,我想用一些额外的元数据来包装我的回复,以便它们看起来像:
{
'success': true,
'data': {
... // Normal response
}
}
成功值会像 statusCode == 200
.
一样简单
我读过有关使用响应宏、响应工厂、中间件之后、Fractal 库等的内容
理想情况下,它适用于所有响应,例如返回 Eloquent 模型和集合,以及 Response::json($data)
.
在 Laravel 5.2 时实现此目标的最佳/正确方法是什么?
谢谢。
您可以为此使用分形包。然后你可以 运行 通过一个转换器来响应并得到正确的响应。这是它的包装。 https://packagist.org/packages/league/fractal
如果您正在为 Laravel 开发 API,我建议您查看 Dingo. It is one of the most useful package for developing APIs. Dingo uses Fractal to transform the responses. In your application to add such metadata, you could use Transformers in Dingo。还有很多事件,你可以监听和修改你的数据。在您的特定示例中,ResponseWasMorphed
将是您要收听的事件之一。
如果您想在不添加外部包的情况下继续您的项目,您可以覆盖 BaseController
中的 response()
方法,它可以检查并添加所需的内容。
public function response($data, $status)
{
//calculate parameter based on $status
$success = ...
return response(array_merge($data, ['success' => $success]));
}
目前,我正在返回这样的数据(基本示例):
public function index()
{
return User::all();
}
但是,我想用一些额外的元数据来包装我的回复,以便它们看起来像:
{
'success': true,
'data': {
... // Normal response
}
}
成功值会像 statusCode == 200
.
我读过有关使用响应宏、响应工厂、中间件之后、Fractal 库等的内容
理想情况下,它适用于所有响应,例如返回 Eloquent 模型和集合,以及 Response::json($data)
.
在 Laravel 5.2 时实现此目标的最佳/正确方法是什么?
谢谢。
您可以为此使用分形包。然后你可以 运行 通过一个转换器来响应并得到正确的响应。这是它的包装。 https://packagist.org/packages/league/fractal
如果您正在为 Laravel 开发 API,我建议您查看 Dingo. It is one of the most useful package for developing APIs. Dingo uses Fractal to transform the responses. In your application to add such metadata, you could use Transformers in Dingo。还有很多事件,你可以监听和修改你的数据。在您的特定示例中,ResponseWasMorphed
将是您要收听的事件之一。
如果您想在不添加外部包的情况下继续您的项目,您可以覆盖 BaseController
中的 response()
方法,它可以检查并添加所需的内容。
public function response($data, $status)
{
//calculate parameter based on $status
$success = ...
return response(array_merge($data, ['success' => $success]));
}