php - Laravel Eloquent API 资源:从响应(集合)中删除“数据”键
问题描述
我有雄辩的 API 资源UserResource
。当我尝试运行类似这样的代码时:
$users = User::paginate(10);
return UserResource::collection($users);
响应将是这样的:
{
"data": [
{
"name": "Fatima Conroy",
"email": "ocie.stark@example.org"
},
{
"name": "John Doe",
"email": "john.doe@example.org"
}
]
}
我如何删除data
密钥或重命名它以获得类似这样的响应?
[
{
"name": "Fatima Conroy",
"email": "ocie.stark@example.org"
},
{
"name": "John Doe",
"email": "john.doe@example.org"
}
]
解决方案
如果您想使用自定义键而不是数据,您可以在资源类上定义 $wrap 属性:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class User extends JsonResource
{
/**
* The "data" wrapper that should be applied.
*
* @var string
*/
public static $wrap = 'user';
}
如果您想禁用“数据”键而不是数据,您可以在资源类上定义 $wrap = null属性:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class User extends JsonResource
{
/**
* The "data" wrapper that should be applied.
*
* @var string
*/
public static $wrap = null;
}
如果您想禁用最外层资源的包装,您可以在基础资源类上使用 withoutWrapping 方法。通常,您应该从 AppServiceProvider 或其他服务提供者调用此方法,该服务提供者会在对应用程序的每个请求中加载:
<?php
namespace App\Providers;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
JsonResource::withoutWrapping(); // This command removes "data" key from all classes extended from "JsonResource"
user::withoutWrapping(); // This command removes "data" key from only "user"
}
}
您也可以参考以下官方链接了解更多信息: https ://laravel.com/docs/8.x/eloquent-resources#data-wrapping
推荐阅读
- excel - Excel 删除 FTP 登录
- android - CardView 上具有相对/线性布局的动画图像
- mysql - MySQL 查询中 FROM 之后的第二个词是什么意思?
- ios - swift: ContainerView 正确动作
- ios - Obj-C,CLS_LOG Crashlytics 日志记录未在 Xcode 控制台中显示调试输出?
- node.js - NodeJS - 如何从承诺中获取数据返回并将其导出
- javascript - 在事件监听器中使用 typeof
- swift - Swift:UIImageView 的 CropView
- mysql - 从 sql 过滤
- java - oracle 带 JDBC 删除账户功能