WPTomo / Hane

A lightweight API data conversion layer use for Laravel framework.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

About

A lightweight API data conversion layer use for Laravel framework.


Languages

Language:PHP 100.0%