brianbrian666 / tp-transformer
Fractal-based API response transformers for ThinkPHP 5 through 8
Requires
- php: >=5.5.9
- league/fractal: ^0.19.2
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-10 13:14:40 UTC
README
ThinkPHP 5–8 的 API 数据转换与 JSON 响应工具,基于 League Fractal。可以把单条数据、集合或 ThinkPHP 分页结果交给 Transformer,统一生成响应。
安装
composer require brianbrian666/tp-transformer
本包不锁定 ThinkPHP 主版本;请按所用 ThinkPHP 版本安装其要求的 PHP 版本。PHP 最低版本为 5.6,ThinkPHP 6–8 自身通常要求更高版本。
使用
Transformer 按 Fractal 约定实现 transform():
<?php namespace app\transformer; use League\Fractal\TransformerAbstract; class UserTransformer extends TransformerAbstract { public function transform($user) { return [ 'id' => $user['id'], 'name' => $user['name'], ]; } }
在控制器中直接使用工厂:
use brianbrian666\TpTransformer\Response\Factory; class UserController { public function show($id) { $user = model('User')->find($id); return (new Factory())->item($user, \app\transformer\UserTransformer::class); } public function index() { $users = model('User')->select(); return (new Factory())->collection($users, \app\transformer\UserTransformer::class); } public function page() { $users = model('User')->paginate(15); return (new Factory())->paginator($users, \app\transformer\UserTransformer::class); } }
工厂方法也接受 Transformer 实例:
$factory->item($user, new UserTransformer());
返回值是 ThinkPHP 的 think\Response JSON 响应,可直接从控制器返回。noContent() 生成 204 响应,error($message, $statusCode) 用于生成指定状态码的 JSON 响应。分页 URL 会按请求的页码逐页生成。
ThinkPHP 5–8 兼容说明
分页适配器不对 ThinkPHP 的分页类或 ORM 集合类做硬编码类型约束,兼容各版本提供的 getCollection() / items()、currentPage() / getCurrentPage() 等分页接口。响应通过 ThinkPHP 的 think\Response::create() 创建。建议在目标项目的 ThinkPHP 版本中验证控制器返回响应及分页 URL 配置。
灵感来源
本项目的过滤器式 API 调用灵感来自 Tucker-Eric/EloquentFilter;本包实现的是 ThinkPHP 下基于 Fractal 的数据转换与响应功能。
License
MIT