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

And*_*ter 6 laravel eloquent laravel-7

我有自定义的 eloquent api 资源user。例如,当我使用此资源时

代码

$user = $request->user();
return new UserResource($user);
Run Code Online (Sandbox Code Playgroud)

然后在回应我得到:

{
    "data": {
        "name": "Margarete Daniel",
        "email": "goldner.berniece@example.net",
        "verified": "2020-03-20T07:15:56.000000Z"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "name": "Margarete Daniel",
    "email": "goldner.berniece@example.net",
    "verified": "2020-03-20T07:15:56.000000Z"
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ias 17

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

use Illuminate\Http\Resources\Json\JsonResource    

public function boot()
{
    JsonResource::withoutWrapping();
}
Run Code Online (Sandbox Code Playgroud)

boot在你的方法里面AppServiceProvider.php


Red*_*uki 13

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

public function boot()
{
    UserResource::withoutWrapping();
}
Run Code Online (Sandbox Code Playgroud)

你可以参考Laravel 文档中关于数据包装的更多解释。


Ahm*_*oud 10

这对我有用

return UserResource::make($user)->toArray($request);
Run Code Online (Sandbox Code Playgroud)

并用于收藏

return UserResource::collection($users)->collection;
Run Code Online (Sandbox Code Playgroud)


Mus*_*aya 8

将此添加到您的资源中

public static $wrap = null;
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案 - 这会禁用每个资源而不是整个应用程序的数据包装 (5认同)

J. *_*man 7

回答,因为我自己一直在同一个问题上磕磕绊绊。

无需data包装就返回 Laravel 资源的最简单方法是简单地在 JSON 响应中返回它。所以,而不是做:

return new UserResource($user);
Run Code Online (Sandbox Code Playgroud)

你会这样做:

return response()->json(new UserResource($user));
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您也不必担心对方法AppServiceProvider进行大量调用withoutWrapping

  • 为什么返回 JsonResponse 会移除换行?有文档链接吗? (2认同)