10

我有自定义的 eloquent api 资源user。例如当我使用这个资源

代码

$user = $request->user();
return new UserResource($user);

然后在回应我得到:

{
    "data": {
        "name": "Margarete Daniel",
        "email": "goldner.berniece@example.net",
        "verified": "2020-03-20T07:15:56.000000Z"
    }
}

我如何更改 api 资源并获得示例响应:

{
    "name": "Margarete Daniel",
    "email": "goldner.berniece@example.net",
    "verified": "2020-03-20T07:15:56.000000Z"
}
4

5 回答 5

22

将此添加到您的资源中

public static $wrap = null;
于 2021-06-05T18:41:44.617 回答
18

您可以通过withoutWrappingAppServiceProvider. 在您的情况下,它将是:

public function boot()
{
    UserResource::withoutWrapping();
}

您可以参考有关数据包装的 Laravel 文档以获取更多说明。

于 2020-03-24T11:32:54.773 回答
14

在我自己不断遇到同样的问题时回答。

返回没有包装的 Laravel 资源的最简单方法data是简单地在 JSON 响应中返回它。所以不要这样做:

return new UserResource($user);

你会这样做:

return response()->json(new UserResource($user));

这样,您也不必担心AppServiceProvider大量调用该withoutWrapping方法。

于 2021-03-03T20:20:30.773 回答
5

要删除项目中所有资源的数据包装器,只需添加:

use Illuminate\Http\Resources\Json\JsonResource    

public function boot()
{
    JsonResource::withoutWrapping();
}

boot在你的方法里面AppServiceProvider.php

于 2021-05-06T16:59:21.573 回答
2

这对我有用

return UserResource::make($user)->toArray($request);

和收集

return UserResource::collection($users)->collection;
于 2021-08-12T13:40:21.270 回答