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 】
相关推荐:
大连 网站制作,大连天途有线官网?
百度浏览器如何管理插件 百度浏览器插件管理方法
如何批量查询域名的建站时间记录?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel PHP版本要求一览_Laravel各版本环境要求对照
🚀拖拽式CMS建站能否实现高效与个性化并存?
Linux系统运维自动化项目教程_Ansible批量管理实战
浅析上传头像示例及其注意事项
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
如何在阿里云购买域名并搭建网站?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
如何注册花生壳免费域名并搭建个人网站?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Android自定义控件实现温度旋转按钮效果
Laravel如何创建自定义Facades?(详细步骤)
如何快速生成可下载的建站源码工具?
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Laravel如何使用Service Container和依赖注入?(代码示例)
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
JavaScript如何实现错误处理_try...catch如何捕获异常?
python中快速进行多个字符替换的方法小结
Python数据仓库与ETL构建实战_Airflow调度流程详解
在Oracle关闭情况下如何修改spfile的参数
如何用IIS7快速搭建并优化网站站点?
非常酷的网站设计制作软件,酷培ai教育官方网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel如何使用Sanctum进行API认证?(SPA实战)
高端智能建站公司优选:品牌定制与SEO优化一站式服务
linux top下的 minerd 木马清除方法
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
HTML 中动态设置元素 name 属性的正确语法详解
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
新三国志曹操传主线渭水交兵攻略
手机软键盘弹出时影响布局的解决方法
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
如何登录建站主机?访问步骤全解析
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
如何在建站之星绑定自定义域名?
手机网站制作与建设方案,手机网站如何建设?

