Laravel API资源类怎么用_Laravel API Resource数据转换
发布时间 - 2025-12-12 00:00:00 点击率:次Laravel API 资源类用于统一 JSON 响应格式,1. 通过 make:resource 命令生成资源类;2. 在 toArray 方法中定义返回字段与结构;3. 控制器中返回单个资源或集合,自动适配分页;4. 使用 whenLoaded 等方法条件性包含数据避免 N+1 查询;5. 重写 with 方法添加全局状态信息,提升 API 规范性与可维护性。
Laravel 的 API 资源类(API Resource)用于将模型和模型集合转换为一致的 JSON 响应格式,特别适用于构建 RESTful API。它让你能清晰地控制返回给前端的数据结构,同时支持单个资源和资源集合的处理。
创建 API 资源类
使用 Artisan 命令可以快速生成资源类:
php artisan make:resource UserResource php artisan make:resource UserCollection // 或者直接用 UserResource::collection()
执行后会在 app/Http/Resources 目录下生成 UserResource.php 文件。
定义资源类结构
打开生成的资源类,toArray 方法决定了输出的 JSON 结构:
class UserResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->created_at->toISOString(),
// 可以添加关联数据或计算字段
'profile' => new ProfileResource($this->whenLoaded('profile')),
];
}
}
$this 指向当前模型实例,你可以按需选择字段、格式化日期、嵌套其他资源等。
在控制器中使用资源类
在控制器中返回资源类,Laravel 会自动将其解析为 JSON:
use App\Http\Resources\UserResource;
use App\Models\User;
// 返回单个用户
public function show($id)
{
return new UserResource(User::findOrFail($id));
}
// 返回用户列表
public function index()
{
return UserResource::collection(User::all());
// 或分页时自动适配
// return UserResource::collection(User::paginate());
}
当你返回 UserResource::co,Laravel 会自动处理分页数据,包含元信息如
llection()links 和 meta。
条件性包含数据
使用 when()、whenLoaded()、mergeWhen() 等方法可避免 N+1 查询并按条件返回字段:
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->when(auth()->user()->isAdmin(), $this->email),
'profile' => new ProfileResource($this->whenLoaded('profile')),
'posts_count' => $this->when(isset($this->posts_count), $this->posts_count),
];
比如 whenLoaded 只有在预加载了 profile 关联时才包含该字段,避免意外触发数据库查询。
自定义资源响应
如果需要添加额外顶层字段(如状态信息),可重写 with 方法:
public function with($request)
{
return [
'status' => 'success',
'timestamp' => now()->toISOString(),
];
}
这样每次返回该资源时都会附加这些信息。
基本上就这些。合理使用 Laravel API 资源类,可以让 API 数据结构更规范、更易维护,尤其适合前后端分离项目。
# php
# laravel
# js
# 前端
# json
# app
# 后端
# ai
# restful api
# restful
# Resource
# 数据结构
# Collection
# this
# 数据库
# http
# 分页
# 器中
# 重写
# 你可以
# 当你
# 适用于
# 会在
# 将其
# 自定义
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何与Inertia.js和Vue/React构建现代单页应用
php打包exe后无法访问网络共享_共享权限设置方法【教程】
JavaScript实现Fly Bird小游戏
微信小程序 input输入框控件详解及实例(多种示例)
Laravel如何使用Vite进行前端资源打包?(配置示例)
在线教育网站制作平台,山西立德教育官网?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何用已有域名快速搭建网站?
如何快速搭建自助建站会员专属系统?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
php json中文编码为null的解决办法
高防服务器租用指南:配置选择与快速部署攻略
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel如何创建自定义Facades?(详细步骤)
清除minerd进程的简单方法
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
电商网站制作价格怎么算,网上拍卖流程以及规则?
浅谈javascript alert和confirm的美化
南京网站制作费用,南京远驱官方网站?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在IIS7中新建站点?详细步骤解析
如何在IIS中新建站点并解决端口绑定冲突?
如何挑选最适合建站的高性能VPS主机?
Laravel怎么为数据库表字段添加索引以优化查询
WEB开发之注册页面验证码倒计时代码的实现
如何用西部建站助手快速创建专业网站?
Laravel怎么实现模型属性的自动加密
Linux系统运维自动化项目教程_Ansible批量管理实战
Android自定义listview布局实现上拉加载下拉刷新功能
Laravel如何使用Blade组件和插槽?(Component代码示例)
Laravel观察者模式如何使用_Laravel Model Observer配置
iOS正则表达式验证手机号、邮箱、身份证号等
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Laravel如何处理异常和错误?(Handler示例)
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
微信小程序 HTTPS报错整理常见问题及解决方案
如何快速重置建站主机并恢复默认配置?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
海南网站制作公司有哪些,海口网是哪家的?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)

