josbeir/cakephp-paginator-sortmap

支持自定义可排序映射键的分页器

安装: 294

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:cakephp-plugin

0.1 2018-07-13 09:58 UTC

This package is not auto-updated.

Last update: 2024-09-20 17:48:50 UTC


README

Software License Build Status

此插件是内置 cakephp 分页器的修改版本。不再使用 sortWhitelist,而是现在有一个 sortMap 选项,您可以在其中定义排序字段的映射。

在 Slack 上的一些讨论以及 cakephp 主存储库上的一个旧 问题 后,创建了此插件作为概念证明。

此插件还确保分页与 Cakephp\Elasticsearch 等插件正确工作。

安装

常规操作

composer require josbeir/cakephp-paginator-sortmap

然后通过将其添加到 Application::bootstrap() 启用插件

$this->addPlugin('Josbeir/Paginator');

控制器示例

<?php
namespace App\Controller;

class FooController extends AppController
{    
    public function initialize()
    {
        parent::initialize();
        
        $this->loadComponent('Josbeir/Paginator.Paginator');
    }
    
    public function index()
    {
        $paginate = [
            'sortMap' => [
                'name' => 'name',
                'modified' => [ 'modified', 'name' ]
            ]
        ];
        
        // paginate FooTable
        $results = $this->Paginator->paginate($this->Foo, $paginate);
    }
}

排序映射 => 字段

在其最简单形式中,您只需使用 sortMap 重新命名排序键

[
    'sortMap' => [
        'foo' => 'bar'
    ]
]

将产生以下排序顺序

[ 'bar' => 'asc' ]

在一个排序下映射多个字段

映射也可以由多个排序字段分组组成

[
    'sortMap' => [
        'foo' => [
            'Article.name',
            'Article.created'
        ]
    ]
]

因此,当在 foo 上排序时,将生成以下顺序子句并传递给数据源对象(其中方向从 foo 参数传递到两个字段'中

Article.name' => asc
Article.created' => asc

您还可以将固定的排序条件分配给 sortmap 中的特定字段。然后,将使用这些条件而不是从 foo 传递的方向。

[
    'sortMap' => [
        'foo' => [
            'Article.name',
            'Article.created' => 'asc'
        ]
    ]
]

旧版行为

当只提供字段名称时,将回退到之前默认的 sortWhitelist 行为,其中将检查名称是否存在于数据源中,并使用相应的别名进行前缀。

只有在这种情况下才会执行前缀。当使用映射时,预期您自己处理别名。

[
    'sortMap' => [
        'name',
        'created'
    ]
]