josbeir / cakephp-paginator-sortmap
支持自定义可排序映射键的分页器
0.1
2018-07-13 09:58 UTC
Requires
- cakephp/cakephp: ^3.6
Requires (Dev)
- cakephp/cakephp-codesniffer: ^3.0
- phpunit/phpunit: ^5.7.14|^6.0
This package is not auto-updated.
Last update: 2024-09-20 17:48:50 UTC
README
此插件是内置 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' ] ]