新闻中心

Lar*el API资源类怎么用_Lar*el API Resource数据转换

2025-12-12
浏览次数:
返回列表
Lar*el API 资源类用于统一 JSON 响应格式,1. 通过 make:resource 命令生成资源类;2. 在 toArray 方法中定义返回字段与结构;3. 控制器中返回单个资源或集合,自动适配分页;4. 使用 whenLoaded 等方法条件性包含数据避免 N+1 查询;5. 重写 with 方法添加全局状态信息,提升 API 规范性与可维护性。

laravel api资源类怎么用_laravel api resource数据转换

Lar*el 的 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 指向当前模型实例,你可以按需选择字段、格式化日期、嵌套其他资源等。

在控制器中使用资源类

在控制器中返回资源类,Lar*el 会自动将其解析为 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::collection(),Lar*el 会自动处理分页数据,包含元信息如 linksmeta

微软爱写作 微软爱写作

微软出品的免费英文写作/辅助/批改/评分工具

微软爱写作 130 查看详情 微软爱写作

条件性包含数据

使用 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(),
    ];
}

这样每次返回该资源时都会附加这些信息。

基本上就这些。合理使用 Lar*el API 资源类,可以让 API 数据结构更规范、更易维护,尤其适合前后端分离项目。

以上就是Lar*el API资源类怎么用_Lar*el API Resource数据转换的详细内容,更多请关注php中文网其它相关文章!


# 报错  # 关键词网站营销推广  # 中山网站建设推广报价  # 邯郸推广网站建设公司  # 快速提升seo技术方案  # 微信怎么推广网络营销号  # 北京网站优化软件  # 赤峰购物网站建设  # 新型的泉州seo预订  # 建筑行业百度推广营销  # 政府网站建设分类  # 当你  # 你可以  # 绑定  # php  # 重写  # 器中  # 分页  # 数据结构  # 微软  # restful api  # ai  # 后端  # app  # json  # 前端  # js  # laravel 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Python异步编程实践:使用Binance API构建实时交易数据流  微信商城在哪里打开【步骤】  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  C++指针和引用有什么区别_C++内存管理核心概念深度解析  腾讯视频怎么举报不良内容_腾讯视频内容举报流程与违规信息处理方法  学习通网页版官方登录 超星学习通电脑端入口指南  Kafka Streams中基于消息头条件过滤消息的实现指南  Django表单验证失败时保留用户输入数据的最佳实践  优化大型XML文件解析:基于Python流式处理的内存高效方案  css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容  qq游戏手机版下载安装_qq游戏移动端入口  漫蛙漫画官方首页 漫蛙2漫画在线阅读入口  优化 Jest 模拟:强制未实现函数抛出错误以提升测试效率  Django表单提交验证失败后保持字段值不刷新  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍  Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式  Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】  如何提高微信支付的安全性_微信支付安全防护与设置建议  PySpark中从现有列右侧提取可变长度字符创建新列的教程  Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注  Golang如何安装Swagger工具_GoSwagger文档生成环境  PHP表单数据传递:如何通过隐藏输入字段获取动态ID  AO3官方镜像站点汇总 AO3同人作品网页版直达链接  Pygame教程:解决用户输入与游戏状态更新不同步问题  VS Code远程开发时如何处理文件权限问题  Log4j Console Appender性能瓶颈与高并发优化策略  J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析  QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网  c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架  React中useState与局部变量:理解组件状态管理与渲染机制  漫蛙2网页版漫画入口 漫蛙漫画在线官方登录  J*aScript对象创建方式_J*aScript设计模式应用  必由学官方网站入口 必由学学生教师共用登录通道  C++如何实现异步操作_C++11使用std::future和std::async进行异步编程  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  zookeeper 都有哪些功能?  Pandas DataFrame:高效添加条件计算列  不会效仿卡普空!《铁拳》制作人澄清:不采取赛事付费|直播|  如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  jQuery Mask 插件中实现电话号码固定前导零的教程  天眼查企业查询官网入口 天眼查官方网页版查询  抓大鹅无需下载版 抓大鹅秒玩版入口  Angular响应式表单:实现提交后表单及按钮的禁用与只读化  反效果?《战地6》免费试玩开启后玩家数不升反降  j*a toString()的覆盖 

搜索