Hane
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