首页 > php框架 > Laravel > 正文

Laravel API资源类怎么用_Laravel API Resource数据转换

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

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

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::collection(),Laravel 会自动处理分页数据,包含元信息如 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(),
    ];
}
登录后复制

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

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

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

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号