Laravel 8 数据包裹

2021-07-19 11:46 更新

默认情况下,当资源响应被转换成 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 键。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号