homesheer / laravel-assembler
Laravel 的 Eloquent 模型或 DTO 组装器
V2.0.4
2020-03-03 08:04 UTC
Requires
- php: >=7.1
- illuminate/support: >=5.8
Requires (Dev)
- phpunit/phpunit: 7.5.6
README
介绍
Laravel Assembler 用于检索前端请求中 Eloquent 模型或 DTO 的指定字段,以减少 API 接口升级的需求。
要求
此包需要 Laravel 5.4 或更高版本。
安装
您可以通过 Composer 安装此包
composer require homesheer/laravel-assembler
您可以使用以下命令发布配置文件
php artisan vendor:publish --provider="HomeSheer\LaravelAssembler\AssemblerServiceProvider" --tag="config"
对于 Laravel 5.4 或更早版本
// config/app.php HomeSheer\LaravelAssembler\AssemblerServiceProvider::class,
对于 Lumen
// bootstrap/app.php $app->register(HomeSheer\LaravelAssembler\AssemblerServiceProvider::class);
使用方法
1. 实例化 Assembler
或从 Assembler
继承的子类,并传入 Eloquent 模型或 DTO
$assembler = new Assembler(User::find($id));
2. 调用 Assembler
的 getAssembledData
方法以获取组装数据
$assembledUserData = $assembler->getAssembledData();
3. 将查询字符串 fields
添加到 URL 中并指定要获取的字段
请求的控制器方法返回上一步的 $assembledUserData
return $this->response($assembledUserData);
请求 API 接口,在 fields
查询字符串中指定字段
// Get name and gender field information for users with ID 1
https:///users/1?fields={name,gender}
4. 可以获取不存在于 Eloquent Model
或 DTO
中的属性
简单地创建一个新的类,继承自 Assembler
并定义获取虚拟属性的方法
class UserAssembler extends Assembler { public function getVirtualField() { return 'VirtualField'; } }
然后将虚拟字段添加到请求中
https:///users/1?fields={name,gender,virtualField}
5. 支持三种类型的数据源:具有 getter
方法的对象、没有 getter
方法但有 public
属性的对象和关联数组
具有 getter
方法的对象
class User { public function getName() { return 'Mars'; } }
没有 getter
方法但有 public
属性的对象
class User { public $name = 'Mars'; }
关联数组
$user = [ 'name' => 'Mars', ];
6. 优先级
获取的字段按照以下顺序从高到低检索,直到字段终止,默认返回 null
如果未检索到。
- 自定义
Assembler
中的getter
方法 Eloquent Model
或DTO
中的getter
方法Eloquent Model
或DTO
中的属性
7. 嵌套级联
在 Eloquent Model
的情况下,自然支持获取关联模型属性,以及返回对象或数组的自定义 getter
方法或属性。
// Address is the associated object of user model
https:///users/1?fields={name,gender,address{province,city}}
在 DTO
的情况下,您需要定义自己的 getter
方法或属性,该属性返回对象或数组。
如果是关联数组,它就是一个多维关联数组。
为了响应速度,不建议嵌套超过五层。
8. 配置
如果自定义 Assembler
和 config/assembler.php
中的 maps
配置了相应的关联,则当在实例化父类 Assembler
后调用 getAssembler
方法时,将自动获取 getAssembledData
的相应 getter
方法。
贡献
欢迎贡献,感谢大家 :)
许可证
Laravel Assembler 是开源软件,采用 MIT 许可证。