moova / optimus-architect
moova.io 对 esbenp/architect 包的 fork
3.1.0
2024-01-23 17:59 UTC
Requires
- laravel/framework: ^10.0
Requires (Dev)
- mockery/mockery: 1.5.*
- orchestra/testbench: 8.*
- php-coveralls/php-coveralls: 2.5.*
- phpunit/phpunit: ^10.0
This package is not auto-updated.
Last update: 2024-09-19 06:58:17 UTC
README
简介
Architect 用于动态创建 API 资源关系的结构。听起来很复杂且自负吗?
想象你有一个资源 Book 和相关资源 Author。
Book 1-----n Author
正常嵌入模式
这是使用嵌入模式默认加载相关资源的方式。
{
"books":[
{
"id":1,
"author_id":1,
"title":"How to save the world from evil",
"pages":100,
"author":{
"id":1,
"name":"Optimus Prime"
}
},
{
"id":2,
"author_id":2,
"title":"How to take over the world",
"pages":100,
"author":{
"id":2,
"name":"Megatron"
}
}
]
}
现在使用 Architect 你可以使用 ids 模式和 sideloading 模式来加载相关资源
Ids 模式
仅加载相关资源的 ID。使用 Eloquent 模型的主键属性将在路线图中。
{
"books":[
{
"id":1,
"author_id":1,
"title":"How to save the world from evil",
"pages":100,
"author":1
},
{
"id":2,
"author_id":2,
"title":"How to take over the world",
"pages":100,
"author":2
}
]
}
Sideloading 模式
使用 ID 模式解析器将相关资源提升到全局作用域,并留下 ID。
{
"author":[
{
"id":1,
"name":"Optimus Prime"
},
{
"id":2,
"name":"Megatron"
}
],
"books":[
{
"id":1,
"author_id":1,
"title":"How to save the world from evil",
"pages":100,
"author":1
},
{
"id":2,
"author_id":2,
"title":"How to take over the world",
"pages":100,
"author":2
}
]
}
使用方法
Architect 与普通数组(集合和资源)、Illuminate\Support\Collection 和 Illuminate\Database\Eloquent\Model 一起工作。
<?php $books = Book::with('Author')->get(); $architect = new \Optimus\Architect\Architect; $parsed = $architect->parseData($books, [ 'author' => 'sideload' // can also be embed or ids (embed is default) ], 'books');
Optimus\LaravelController 提供了方便的方法来在查询参数中定义 Architect 关系。
安装
composer require moova/optimus-architect dev-master
标准
此包符合 PSR-1、PSR-2 和 PSR-4。如果您发现符合性疏漏,请通过拉取请求发送补丁。
测试
$ phpunit
贡献
有关详细信息,请参阅 CONTRIBUTING。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。