budgetdumpster / hal-formatter
HAL 输出格式化
Requires
- php: >=5.5.0
- nocarrier/hal: ^0.9.12
Requires (Dev)
- phpunit/phpunit: ^6.4
This package is not auto-updated.
Last update: 2024-09-15 23:27:17 UTC
README
安装
composer require budgetdumpster/hal-formatter:dev-master
测试
可以使用库根目录中的 phpunit
命令运行测试
用法
配置
如果你没有包含嵌入资源的资源,则在 HalFormatter::formatResource
中的 $embedded
参数是可选的。但是,如果你希望将嵌入资源纳入你的响应,配置将帮助你构建所需的架构。
该库基于以下假设:在大多数 ORM 中,相关资源在检索关系时最终会出现在模型的一个属性上。配置允许你根据属性将那些相关资源移动到响应的嵌入部分。
例如,你可能有这样的东西:Model::person_id
- 作为相关资源 Model::person
的标识符 Model::person
- 实际 Person 模型被拉入的属性
配置如下
$embedded = [ 'person' => [ 'property' => 'person', 'key' => 'person', 'uri' => 'person' ] ];
这个配置告诉我们 - 我们将把 Model::person
属性中的数据移动到 $key
键下的嵌入资源中,并且该资源的任何链接都将使用 $uri
的值。该库可以与单个模型、数组或模型的集合一起工作。
格式化资源或集合
这个库中最困难的部分是理解配置(由于它是一个矩阵,你可以附加多个配置。让我们使用上面的示例配置和假设我们的模型将有一个名为 person
的属性。
<?php
use BudgetDumpster\Formatters\HalFormatter;
use NameSpace\Models\Address;
$address = new Address();
$collection = $address->where('city', 'like', '%Westlake%');
$embedded = [
'person' => [
'property' => 'person',
'key' => 'person',
'uri' => 'person'
]
];
$formatter = new HalFormatter();
$responseBody = $formatter->formatResource($collection, $uri = 'address', $embedded);
这将返回一个地址集合,地址集合中的每个条目都将移除 person
属性,并将有一个包含在嵌入资源中的 person
集合。
除了可用的少量 API 之外,HalFormatter 还扩展了 Nocarrier\Hal
,因此可以使用 Nocarrier\Hal
的所有原生函数。