Laravel eloquent api 资源删除 `data` 键(无集合)

Laravel eloquent api resource remove `data` key (no collection)

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

代码

$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"
}

您可以通过在 AppServiceProvider 中调用资源的 withoutWrapping 静态方法来禁用数据换行。在你的情况下它将是:

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

更多解释可以参考Laravel documentation about data wrapping

回答我自己也一直在遇到同样的问题。

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

return new UserResource($user);

你会做:

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

这样,您也不必担心因多次调用 withoutWrapping 方法而导致 AppServiceProvider 塞满。

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

use Illuminate\Http\Resources\Json\JsonResource    

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

AppServiceProvider.phpboot 方法中。

将此添加到您的资源

public static $wrap = null;

这对我有用

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

和 collection

return UserResource::collection($users)->collection;

出于某种原因,这有效:

$user = User::find(1);

return UserResource::make($user)->resolve();

没有 ->resolve() 就不行。