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观察者模式如何使用_Laravel Model Observer配置
如何获取免费开源的自助建站系统源码?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
如何登录建站主机?访问步骤全解析
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
如何在Windows 2008云服务器安全搭建网站?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在Windows服务器上快速搭建网站?
Python面向对象测试方法_mock解析【教程】
phpredis提高消息队列的实时性方法(推荐)
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
如何在建站之星网店版论坛获取技术支持?
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
香港服务器如何优化才能显著提升网站加载速度?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何用虚拟主机快速搭建网站?详细步骤解析
Python3.6正式版新特性预览
Laravel如何使用查询构建器?(Query Builder高级用法)
php结合redis实现高并发下的抢购、秒杀功能的实例
黑客如何利用漏洞与弱口令入侵网站服务器?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
手机软键盘弹出时影响布局的解决方法
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Python文件异常处理策略_健壮性说明【指导】
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
重庆市网站制作公司,重庆招聘网站哪个好?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
网站建设保证美观性,需要考虑的几点问题!
如何快速搭建高效香港服务器网站?
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何实现用户密码重置功能?(完整流程代码)
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Swift开发中switch语句值绑定模式
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
微信推文制作网站有哪些,怎么做微信推文,急?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】

