SimplePaginator 类
简化的分页器,它避免了获取记录总数的潜在昂贵查询。
使用简单分页器时,您将无法生成页码。取而代之的是,只使用上/下翻页控件。
属性概述
-
$_config protected
array<string, mixed>
运行时配置
-
$_configInitialized protected
bool
配置属性是否已使用默认值配置
-
$_defaultConfig protected
array<string, mixed>
默认分页设置。
-
$pagingParams protected
array
计算的分页参数。
方法概述
-
_configDelete() protected
删除单个配置键。
-
_configRead() protected
读取配置键。
-
_configWrite() protected
写入配置键。
-
_prefix() protected
如果可能,将字段名前缀加上表别名。
-
_removeAliases() protected
如果需要,删除别名。
-
addPageCountParams() protected
添加 “currentPage” 和 “pageCount” 参数。
-
addPrevNextParams() protected
添加 “prevPage” 和 “nextPage” 参数。
-
addSortingParams() protected
添加排序/顺序参数。
-
addStartEndParams() protected
添加 “start” 和 “end” 参数。
-
buildPaginated() protected
构建分页结果集。
-
buildParams() protected
构建分页参数。
-
checkLimit() protected
检查 limit 参数并确保它在 maxLimit 范围内。
-
configShallow() public
将提供的配置与现有配置合并。与
config()
方法不同,该方法对嵌套键进行递归合并,而该方法进行简单合并。 -
extractData() protected
提取所需的分页数据
-
getConfig() public
返回配置。
-
getConfigOrFail() public
返回此特定键的配置。
-
getCount() protected
简单分页不执行任何计数查询,因此此方法返回
null
。 -
getDefaults() protected
获取 $model 的设置。如果没有针对特定存储库的设置,则将使用一般设置。
-
getItems() protected
获取分页项目。
-
getQuery() protected
获取用于获取分页结果的查询。
-
mergeOptions() protected
合并 Paginator 使用的各种选项。从以下位置拉取设置
-
paginate() public
处理模型记录的自动分页。
-
setConfig() public
设置配置。
-
validateSort() protected
验证所需的排序是否可以在 $object 上执行。
方法详情
_configDelete() ¶ protected
_configDelete(string $key): void
删除单个配置键。
参数
-
string
$key 要删除的键。
返回
void
抛出
Cake\Core\Exception\CakeException
如果试图覆盖现有配置
_configRead() ¶ protected
_configRead(string|null $key): mixed
读取配置键。
参数
-
string|null
$key 要读取的键。
返回
mixed
_configWrite() ¶ protected
_configWrite(array<string, mixed>|string $key, mixed $value, string|bool $merge = false): void
写入配置键。
参数
-
array<string, mixed>|string
$key 要写入的键。
-
mixed
$value 要写入的值。
-
string|bool
$merge optional True 表示递归合并,'shallow' 表示简单合并,false 表示覆盖,默认为 false。
返回
void
抛出
Cake\Core\Exception\CakeException
如果试图覆盖现有配置
_prefix() ¶ protected
_prefix(Cake\Datasource\RepositoryInterface $object, array $order, bool $allowed = false): array
如果可能,将字段名前缀加上表别名。
参数
-
Cake\Datasource\RepositoryInterface
$object 存储库对象。
-
array
$order 排序数组。
-
bool
$allowed optional 字段是否被允许。
返回
array
_removeAliases() ¶ protected
_removeAliases(array<string, mixed> $fields, string $model): array<string, mixed>
如果需要,删除别名。
参数
-
array<string, mixed>
$fields 当前字段
-
string
$model 当前模型别名
返回
array<string, mixed>
addPageCountParams() ¶ protected
addPageCountParams(array $data): void
添加 “currentPage” 和 “pageCount” 参数。
参数
-
array
$data 分页器数据。
返回
void
addPrevNextParams() ¶ protected
addPrevNextParams(array $data): void
添加 “prevPage” 和 “nextPage” 参数。
参数
-
array
$data 分页数据。
返回
void
addSortingParams() ¶ protected
addSortingParams(array $data): void
添加排序/顺序参数。
参数
-
array
$data 分页数据。
返回
void
addStartEndParams() ¶ protected
addStartEndParams(array $data): void
添加 “start” 和 “end” 参数。
参数
-
array
$data 分页器数据。
返回
void
buildPaginated() ¶ protected
buildPaginated(Cake\Datasource\ResultSetInterface $items, array $pagingParams): Cake\Datasource\Paging\PaginatedInterface
构建分页结果集。
由于查询获取了额外的记录,如果获取的记录数超过了限制/每页,则删除最后一条记录。
参数
-
Cake\Datasource\ResultSetInterface
$items -
array
$pagingParams
返回
Cake\Datasource\Paging\PaginatedInterface
buildParams() ¶ protected
buildParams(array<string, mixed> $data): array<string, mixed>
构建分页参数。
参数
-
array<string, mixed>
$data
返回
array<string, mixed>
checkLimit() ¶ 受保护
checkLimit(array<string, mixed> $options): array<string, mixed>
检查 limit 参数并确保它在 maxLimit 范围内。
参数
-
array<string, mixed>
$options 包含 limit 键的选项数组,用于检查。
返回
array<string, mixed>
configShallow() ¶ 公共
configShallow(array<string, mixed>|string $key, mixed|null $value = null): $this
将提供的配置与现有配置合并。与 config()
方法不同,该方法对嵌套键进行递归合并,而该方法进行简单合并。
设置特定值
$this->configShallow('key', $value);
设置嵌套值
$this->configShallow('some.nested.key', $value);
同时更新多个配置设置
$this->configShallow(['one' => 'value', 'another' => 'value']);
参数
-
array<string, mixed>|string
$key 要设置的键,或完整的配置数组。
-
mixed|null
$value 可选 要设置的值。
返回
$this
extractData() ¶ 受保护
extractData(Cake\Datasource\RepositoryInterface $object, array<string, mixed> $params, array<string, mixed> $settings): array
提取所需的分页数据
参数
-
Cake\Datasource\RepositoryInterface
$object 存储库对象。
-
array<string, mixed>
$params 请求参数
-
array<string, mixed>
$settings 用于分页的设置/配置。
返回
array
getConfig() ¶ 公共
getConfig(string|null $key = null, mixed $default = null): mixed
返回配置。
用法
读取整个配置
$this->getConfig();
读取特定值
$this->getConfig('key');
读取嵌套值
$this->getConfig('some.nested.key');
使用默认值读取
$this->getConfig('some-key', 'default-value');
参数
-
string|null
$key 可选 要获取的键,或 null 表示获取整个配置。
-
mixed
$default 可选 键不存在时的返回值。
返回
mixed
getConfigOrFail() ¶ 公共
getConfigOrFail(string $key): mixed
返回此特定键的配置。
此键的配置值必须存在,不能为 null。
参数
-
string
$key 要获取的键。
返回
mixed
抛出
InvalidArgumentException
getCount() ¶ 受保护
getCount(Cake\Datasource\QueryInterface $query, array $data): int|null
简单分页不执行任何计数查询,因此此方法返回 null
。
参数
-
Cake\Datasource\QueryInterface
$query 查询实例。
-
array
$data 分页数据。
返回
int|null
getDefaults() ¶ 受保护
getDefaults(string $alias, array<string, mixed> $settings): array<string, mixed>
获取 $model 的设置。如果没有针对特定存储库的设置,则将使用一般设置。
参数
-
string
$alias 要获取设置的模型名称。
-
array<string, mixed>
$settings 用于组合的设置。
返回
array<string, mixed>
getItems() ¶ 受保护
getItems(Cake\Datasource\QueryInterface $query, array $data): Cake\Datasource\ResultSetInterface
获取分页项目。
获取比 limit 多一行的记录。这有助于推断下一页是否存在。
参数
-
Cake\Datasource\QueryInterface
$query 用于获取项目的查询。
-
array
$data 分页数据。
返回
Cake\Datasource\ResultSetInterface
getQuery() ¶ 受保护
getQuery(Cake\Datasource\RepositoryInterface $object, Cake\Datasource\QueryInterface|null $query, array<string, mixed> $data): Cake\Datasource\QueryInterface
获取用于获取分页结果的查询。
参数
-
Cake\Datasource\RepositoryInterface
$object 存储库实例。
-
Cake\Datasource\QueryInterface|null
$query 查询实例。
-
array<string, mixed>
$data 分页数据。
返回
Cake\Datasource\QueryInterface
mergeOptions() ¶ 受保护
mergeOptions(array<string, mixed> $params, array $settings): array<string, mixed>
合并 Paginator 使用的各种选项。从以下位置拉取设置
- 通用分页设置
- 模型特定设置。
- 请求参数
此方法的结果是所有选项集的组合。您可以更改配置值 allowedParameters
来修改可以使用请求参数设置哪些选项/值。
参数
-
array<string, mixed>
$params 请求参数。
-
array
$settings 要与请求数据合并的设置。
返回
array<string, mixed>
paginate() ¶ 公共
paginate(mixed $target, array $params = [], array $settings = []): Cake\Datasource\Paging\PaginatedInterface
处理模型记录的自动分页。
配置分页
调用 paginate()
时,您可以使用 $settings 参数传递分页设置。这些设置用于构建发出的查询并控制其他分页设置。
如果您的设置包含一个键,该键包含当前表的别名,那么该键内部的数据将被使用。否则,将使用顶层配置。
$settings = [
'limit' => 20,
'maxLimit' => 100
];
$results = $paginator->paginate($table, $settings);
上面的设置将用于对任何存储库进行分页。您可以通过使用存储库别名作为键来配置特定于存储库的设置。
$settings = [
'Articles' => [
'limit' => 20,
'maxLimit' => 100
],
'Comments' => [ ... ]
];
$results = $paginator->paginate($table, $settings);
这将允许您对 Articles
和 Comments
存储库具有不同的分页设置。
控制排序字段
默认情况下,CakePHP 将自动允许对正在分页的存储库对象上的任何列进行排序。通常您希望允许对关联列或计算字段进行排序。在这种情况下,您需要定义一个允许的列列表,您希望允许对这些列进行排序。您可以在 $settings
参数中定义允许的排序字段
$settings = [
'Articles' => [
'finder' => 'custom',
'sortableFields' => ['title', 'author_id', 'comment_count'],
]
];
将空数组作为 sortableFields 传递将完全禁止排序。
使用自定义查找器进行分页
您可以使用 finder
选项对表上定义的任何查找类型进行分页。
$settings = [
'Articles' => [
'finder' => 'popular'
]
];
$results = $paginator->paginate($table, $settings);
将使用 find('popular')
方法进行分页。
您也可以将已创建的查询实例传递给此方法
$query = $this->Articles->find('popular')->matching('Tags', function ($q) {
return $q->where(['name' => 'CakePHP'])
});
$results = $paginator->paginate($query);
范围请求参数
通过使用请求参数范围,您可以在同一个控制器操作中对多个查询进行分页
$articles = $paginator->paginate($articlesQuery, ['scope' => 'articles']);
$tags = $paginator->paginate($tagsQuery, ['scope' => 'tags']);
上面的每个查询都将使用不同的查询字符串参数集来获取分页数据。分页这两个结果的示例 URL 为
/dashboard?articles[page]=1&tags[page]=2
参数
-
mixed
$target 要分页的存储库或查询。
-
array
$params 可选 请求参数
-
array
$settings 可选 用于分页的设置/配置。
返回
Cake\Datasource\Paging\PaginatedInterface
抛出
Cake\Datasource\Paging\Exception\PageOutOfBoundsException
setConfig() ¶ 公共
setConfig(array<string, mixed>|string $key, mixed|null $value = null, bool $merge = true): $this
设置配置。
用法
设置特定值
$this->setConfig('key', $value);
设置嵌套值
$this->setConfig('some.nested.key', $value);
同时更新多个配置设置
$this->setConfig(['one' => 'value', 'another' => 'value']);
参数
-
array<string, mixed>|string
$key 要设置的键,或完整的配置数组。
-
mixed|null
$value 可选 要设置的值。
-
bool
$merge 可选 是否递归合并或覆盖现有配置,默认为 true。
返回
$this
抛出
Cake\Core\Exception\CakeException
尝试设置无效的键时。
validateSort() ¶ 受保护
validateSort(Cake\Datasource\RepositoryInterface $object, array<string, mixed> $options): array<string, mixed>
验证所需的排序是否可以在 $object 上执行。
只能对字段或 virtualFields 进行排序。方向参数也将被清理。最后,排序和方向键将转换为模型友好的 order 键。
您可以使用 allowedParameters 选项来控制哪些列/字段可通过 URL 参数进行排序。这有助于防止用户对未索引的值进行大量结果集排序。
如果您需要对关联列或合成属性进行排序,则需要使用 sortableFields
选项。
允许的排序字段中列出的任何列都将被隐式信任。您可以使用它对合成列或在自定义查找操作中添加的可能不存在于模式中的列进行排序。
提供给 paginate() 的默认 order 选项将与用户请求的排序字段/方向合并。
参数
-
Cake\Datasource\RepositoryInterface
$object 存储库对象。
-
array<string, mixed>
$options 此请求正在使用的分页选项。
返回
array<string, mixed>
属性详情
$_defaultConfig ¶ 受保护
默认分页设置。
调用 paginate() 时,这些设置将与您提供的配置合并。
maxLimit
- 用户可以选择查看的最大限制。默认为 100limit
- 每页的初始项目数。默认为 20。page
- 起始页,默认为 1。allowedParameters
- 用户可以使用请求参数设置的参数列表。修改此列表将允许用户对分页有更多影响,请小心允许的内容。sortableFields
- 可用于排序的字段列表。默认情况下,所有表列都可以用于排序。您可以使用此选项将排序限制为特定字段。如果您希望允许对关联列或计算字段进行排序,那么您需要显式指定它们(以及其他字段)。使用空数组将完全禁用排序。finder
- 要使用的表查找器。默认为all
。scope
- 如果指定,此范围将用于从传递给 paginate() 的查询参数中获取分页选项。范围允许对分页选项进行命名空间化,并允许在同一个操作中对多个模型进行分页。默认null
。
类型
array<string, mixed>