Laravel 8 数据包裹
默认情况下,当资源响应被转换成 JSON 时,顶层资源将会被包裹在 data
键中。因此一个典型的资源集合响应如下所示:
{
"data": [
{
"id": 1,
"name": "Eladio Schroeder Sr.",
"email": "therese28@example.com",
},
{
"id": 2,
"name": "Liliana Mayert",
"email": "evandervort@example.com",
}
]
}
如果你想使用自定义键而不是 data
,可以在资源类上定义 $wrap
属性:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class User extends JsonResource
{
/**
* 应该应用的「数据」包装器
*
* @var string
*/
public static $wrap = 'user';
}
你可以使用资源基类的 withoutWrapping
方法来禁用顶层资源的包裹。通常,你应该在 AppServiceProvider
或其他在程序每一个请求中都会被加载的 服务提供者 中调用此方法:
<?php
namespace App\Providers;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* 注册应用服务
*
* @return void
*/
public function register()
{
//
}
/**
* 引导应用服务
*
* @return void
*/
public function boot()
{
JsonResource::withoutWrapping();
}
}
注意:
withoutWrapping
方法只会禁用顶层资源的包裹,不会删除你手动添加到资源集合中的data
键。