mixerapi/collection-view

一个简单的 Collection View,用于在 JSON 或 XML 集合响应中显示分页元数据

安装次数: 48,444

依赖项: 1

建议者: 0

安全: 0

星星: 1

观察者: 2

分支: 1

类型:cakephp 插件

v2.0.3 2024-03-25 23:49 UTC

README

Latest Version on Packagist Build Coverage Status MixerApi CakePHP Minimum PHP Version

一个简单的 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/xmlapplication/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&amp;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
    ]
];