jerry58321/api-transform

是一个API转换层

v3.0.2 2023-08-06 08:10 UTC

This package is auto-updated.

Last update: 2024-09-06 10:24:08 UTC


README

composer require jerry58321/api-transform

php artisan vendor:publish --provider="jerry58321\ApiTransform\TransformServiceProvider"

概念

在 Transforms 路径下,应该会有2大主要类别,分别为Models、Features。

Models (Transform):定义已存在的Table Schema,可以被Features引用或者作为其它Models类的关联引用。

Features (Transform):为每一个API功能定义返回的内容,在职责分明、低耦合度的情形下,Features类可以作为其它Features类的引用。

使用方法及示例

// IndexController.php

...

public function index()
{
    /** @var Models/LoginLog $loginLog */
    $loginLog = LoginLog::with('user')->get();

    return LoginLogTransform::response(compact('loginLog'));
}
// Transforms/Models/UserTransform.php

...

class UserTransform extends Transform
{
    public function methodOutputKey(): array
    {
        return [
            'user' => false
        ];
    }

    public function __user(Resources $resource)
    {
        return [
            'account' => $resource->account,
            'name'    => $resource->name,
        ];
    }
}
// Transforms/Models/LoginLogTransform.php

...

class LoginLogTransform extends Transform
{
    public function methodOutputKey(): array
    {
        return [
            'loginLog' => 'login_log'
        ];
    }

    public function __loginLog(Resources $resources)
    {
        $user = UserTransform::quote(['user' => $resources->user]);

        return array_merge($user, [
            'ip'       => $resources->ip,
            'login_at' => $resources->login_at
        ]);
    }
}