jerry58321 / api-transform
is a api transformation layer
v3.0.2
2023-08-06 08:10 UTC
Requires
- php: ^8.1
- illuminate/console: ^7.0|^8.0|^9.0|^10.0
- illuminate/pagination: ^7.0|^8.0|^9.0|^10.0
- symfony/http-foundation: ^5.0|^6.0
Requires (Dev)
- orchestra/testbench: ^5.0|^6.0|^7.0
- phpunit/phpunit: ^9.3
- symfony/var-dumper: ^6.0
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 ]); } }