Search by

brianbrian666 / tp-transformer

xiaoqqqqqq

Fractal-based API response transformers for ThinkPHP 5 through 8

Package info

github.com/brianbrian666/tpTransformer

Homepage

pkg:composer/brianbrian666/tp-transformer

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.0.3 2020-08-10 07:50 UTC

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