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 ] ];