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 】
相关推荐:
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
如何用景安虚拟主机手机版绑定域名建站?
如何用狗爹虚拟主机快速搭建网站?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Java类加载基本过程详细介绍
如何在IIS7上新建站点并设置安全权限?
大连 网站制作,大连天途有线官网?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
想要更高端的建设网站,这些原则一定要坚持!
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel如何实现用户密码重置功能?(完整流程代码)
网页设计与网站制作内容,怎样注册网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
Laravel如何处理文件下载请求?(Response示例)
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
PHP 500报错的快速解决方法
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
如何快速重置建站主机并恢复默认配置?
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
LinuxShell函数封装方法_脚本复用设计思路【教程】
如何在阿里云购买域名并搭建网站?
Laravel怎么在Blade中安全地输出原始HTML内容
nodejs redis 发布订阅机制封装实现方法及实例代码
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何在Tomcat中配置并部署网站项目?
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
如何破解联通资金短缺导致的基站建设难题?
如何自定义建站之星网站的导航菜单样式?
Laravel如何配置Horizon来管理队列?(安装和使用)
如何用AI帮你把自己的生活经历写成一个有趣的故事?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Python文本处理实践_日志清洗解析【指导】
浅析上传头像示例及其注意事项
Laravel怎么清理缓存_Laravel optimize clear命令详解
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
JavaScript如何实现路由_前端路由原理是什么
晋江文学城电脑版官网 晋江文学城网页版直接进入
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
如何快速搭建自助建站会员专属系统?

