wptomo / hane
A lightweight API data conversion layer use for Laravel framework.
v0.1.1
2020-05-28 02:53 UTC
Requires
- php: >=7.0.0
- laravel/framework: >=5.5
This package is auto-updated.
Last update: 2024-05-28 11:24:03 UTC
README
A lightweight API data conversion layer use for Laravel framework.
安装
$ composer require wptomo/hane -vvv
使用
$ php artisan make:converter UserConverter
基本
use Wptomo\Hane\Converter; class UserConverter extends Converter { public function toArray($model) : array { return [ 'id' => $model->id, 'name' => $model->name, 'gender' => $model->gender, 'address' => $model->address, ]; } } // Model $array = new UserConverter(User::find(1))->convert(); // Collection $array = new UserConverter(User::all())->convert();
示例(Model):
{ "id": 1, "name": "wptomo", "gender": 1, "address": "China" }
Collection:
[ { "id": 1, "name": "wptomo", "gender": 1, "address": "China" }, { "id": 2, "name": "wptomo", "gender": 1, "address": "China" } ]
保留部分数据
$array = new UserConverter(User::find(1), ['id', 'name'])->convert();
示例:
{ "id": 1, "name": "wptomo" }
自定义包裹
$array = new UserConverter(User::find(1), ['id', 'name'], 'user')->convert();
示例:
{ "user": { "id": 1, "name": "wptomo" } }
附加数据
$array = new UserConverter(User::all(), ['id', 'name'], 'data', ['pagination' => []])->convert();
示例:
{ "data": [ { "id": 1, "name": "wptomo" } ], "pagination": {} }
{注意}:附加数据一般配合数据包裹使用
包含数据
use Wptomo\Hane\Converter; class UserConverter extends Converter { protected $include = ['posts']; public function toArray($model) : array { return [ 'id' => $model->id, 'name' => $model->name, 'gender' => $model->gender, 'address' => $model->address, ]; } protected function includePosts($model) { return new PostConverter($model->posts); } }
访问:
https://api.wptomo.hane/user?include=posts
示例:
{ "id": 1, "name": "wptomo", "gender": 1, "address": "China", "posts": [] }
回调
use Wptomo\Hane\Converter; class UserConverter extends Converter { protected $shouldCallback = 'doSomethingElse'; public function toArray($model) : array { return [ 'id' => $model->id, 'name' => $model->name, 'gender' => $model->gender, 'address' => $model->address, ]; } protected function doSomethingElse($convertedData, $originalDataType) { // Do something... } }
License
MIT