bcrowe/cakephp-api-pagination

CakePHP 4 插件,将分页信息注入 API 响应。

安装次数: 49,733

依赖关系: 1

建议者: 0

安全性: 0

星标: 40

关注者: 5

分支: 14

开放问题: 0

类型:cakephp-plugin

3.0.1 2024-01-13 16:14 UTC

README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

这是一个简单的 CakePHP 4.2+ 组件,它将 CakePHP 的分页信息注入到序列化的 JsonView 和 XmlView 响应中。

有关支持 4.2 之前版本的 CakePHP 的信息,请参阅此插件的 1.x2.x 版本和分支。

安装

通过 Composer

$ composer require bcrowe/cakephp-api-pagination

通过在项目中的 src/Application.php 文件的 bootsrap 方法中添加 $this->addPlugin('BryanCrowe/ApiPagination'); 来加载插件

public function bootstrap(): void
{
    parent::bootstrap();
    
    // ... bootstrap code ...

    // load more plugins here
    
    $this->addPlugin('BryanCrowe/ApiPagination');
}

用法

请确保您的应用程序已配置为使用数据视图;请参阅 CakePHP 文档中的启用应用程序中的数据视图部分。

然后,加载 ApiPaginationComponent

$this->loadComponent('BryanCrowe/ApiPagination.ApiPagination');

然后,像这样设置您的分页视图变量

$this->set('articles', $this->paginate($this->Articles));
$this->viewBuilder()->setOption('serialize', ['articles']);

注意:您的 serialize 选项必须是一个数组,例如 ['articles'],这样您的分页信息就可以在它自己的分页键下设置。

您的 JsonView 和 XmlView 响应现在将包含分页信息,看起来像这样

{
    "articles": ["...", "...", "..."],
    "pagination": {
        "finder": "all",
        "page": 1,
        "current": 20,
        "count": 5000,
        "perPage": 20,
        "prevPage": false,
        "nextPage": true,
        "pageCount": 250,
        "sort": null,
        "direction": false,
        "limit": null,
        "sortDefault": false,
        "directionDefault": false
    }
}

配置分页输出

ApiPagination 有四个配置键:keyaliasesvisiblemodel

  • key 允许您更改分页键的名称。

  • aliases 允许您更改分页详细信息键的名称。

  • visible 允许您设置将在响应中公开哪些分页键。 注意:在设置键的可见性时,如果已提供别名,请确保使用别名。

  • model 允许您设置分页应用到的模型名称,如果控制器不遵循 CakePHP 规范,例如 ArticlesIndexController。默认情况下,模型是控制器名称,例如 Articles 对于 ArticlesController

使用所有这些配置键的示例

$this->loadComponent('BryanCrowe/ApiPagination.ApiPagination', [
    'key' => 'paging',
    'aliases' => [
        'page' => 'currentPage',
        'current' => 'resultCount'
    ],
    'visible' => [
        'currentPage',
        'resultCount',
        'prevPage',
        'nextPage'
    ],
    'model' => 'Articles',
]);

此配置将产生以下结果

{
    "articles": ["...", "...", "..."],
    "paging": {
        "prevPage": false,
        "nextPage": true,
        "currentPage": 1,
        "resultCount": 20
    }
}

变更日志

请参阅 CHANGELOG 了解最近更改的信息。

测试

$ composer test

贡献

有关详细信息,请参阅 CONTRIBUTINGCONDUCT

安全性

如果您发现任何安全相关的问题,请通过电子邮件[email protected]联系,而不是使用问题跟踪器。

鸣谢

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可文件