mixerapi / collection-view
一个简单的 Collection View,用于在 JSON 或 XML 集合响应中显示分页元数据
v2.0.3
2024-03-25 23:49 UTC
Requires
- php: ^8.1
- adbario/php-dot-notation: ^2.3
- cakephp/cakephp: ^5.0
Requires (Dev)
- josegonzalez/dotenv: ^3.2
- phpunit/phpunit: ^10.0
README
一个简单的 Collection View,用于在 JSON 或 XML 集合响应中显示可配置的分页元数据。更多信息请访问 MixerAPI.com。
安装
!!! info "" 如果已经安装了 MixerAPI,则可以跳过此步骤。但是,你仍然需要定义你的 viewClasses(请参阅下文)。
composer require mixerapi/collection-view bin/cake plugin load MixerApi/CollectionView
或者,在 composer 安装后,你可以手动在应用程序中加载此插件
# src/Application.php public function bootstrap(): void { // other logic... $this->addPlugin('MixerApi/CollectionView'); }
设置
您的控制器必须定义它们的内容协商 视图类。
use MixerApi\CollectionView\View\JsonCollectionView; use MixerApi\CollectionView\View\XmlCollectionView; public function viewClasses(): array { return [JsonCollectionView::class, XmlCollectionView::class]; }
这可以在您的 AppController 中完成,以将它们添加到所有继承的控制器中,或者按控制器逐个定义。
用法
就是这样,你已经完成了。执行 application/xml 或 application/json 请求,就像平常一样。你也可以通过 .xml 或 .json 扩展名请求(假设您已在 config/routes.php 中启用了它们)。此插件只会修改集合(例如控制器 :: index 操作)请求,而不会修改项目(例如控制器 :: view 操作)请求。
JSON 示例
{
"collection": {
"url": "/films?page=3&direction=desc",
"count": 20,
"total": 1000,
"pages": 50,
"next": "/films?page=4",
"prev": "/films?page=2",
"first": "/films",
"last": "/films?page=50"
},
"data": [
{
"id": 1,
"first_name": "PENELOPE",
"last_name": "GUINESS",
"modified": "2006-02-15T04:34:33+00:00",
"films": [
{
"id": 1,
"title": "ACADEMY DINOSAUR",
"description": "A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies",
"release_year": "2006",
"language_id": 1,
"rental_duration": 6,
"length": 86,
"rating": "PG",
"special_features": "Deleted Scenes,Behind the Scenes",
"modified": "2006-02-15T05:03:42+00:00"
}
]
}
]
}
XML 示例
<response> <collection> <url>/films?page=3&direction=desc</url> <count>20</count> <total>1000</total> <pages>50</pages> <next>/films?page=4</next> <prev>/films?page=2</prev> <first>/films</first> <last>/films?page=50</last> </collection> <data> <id>1</id> <first_name>PENELOPE</first_name> <last_name>GUINESS</last_name> <modified>2/15/06, 4:34 AM</modified> <films> <id>1</id> <title>ACADEMY DINOSAUR</title> <description>A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies</description> <release_year>2006</release_year> <language_id>1</language_id> <rental_duration>6</rental_duration> <length>86</length> <rating>PG</rating> <special_features>Deleted Scenes,Behind the Scenes</special_features> <modified>2/15/06, 5:03 AM</modified> </films> </data> </response>
配置
这是可选的。你可以更改响应键的名称,只需创建一个 config/collection_view.php 文件。使用下面的示例,我们可以将 collection 键更改为 pagination,将 data 更改为 items,并更改新分页对象中的某些键名。只需保持映射项的 {{names}} 不变即可。
# config/collection_view.php return [ 'CollectionView' => [ 'pagination' => '{{collection}}', // array that holds pagination data 'pagination.url' => '{{url}}', // url of current page 'pagination.count' => '{{count}}', // items on the page 'pagination.total' => '{{total}}', // total database records 'pagination.pages' => '{{pages}}', // total pages 'pagination.next' => '{{next}}', // next page url 'pagination.prev' => '{{prev}}', // previous page url 'pagination.first' => '{{first}}', // first page url 'pagination.last' => '{{last}}', // last page url 'items' => '{{data}}', // the collection of data ] ];