CakePHP 3.7.7
我正在使用Paginator(https://book.cakephp.org/3.0/en/views/helpers/paginator.html)显示具有972行的查询的分页。
在我的Controller方法中,我正在加载Paginator组件并使用名为findFilters()
的自定义查找器来返回我想要分页的数据。
public function initialize()
{
parent::initialize();
$this->loadComponent('Paginator');
}
public $paginate = [
'finder' => 'filters', // uses custom finder, findFilters() in src/Model/Table/FiltersTable.php
];
/*
* Called via ajax. Renders the data and pagination to a template.
*/
public function getFilters()
{
$this->viewBuilder()->setLayout('ajax');
$this->loadModel('Filters');
$rf_keywords = '';
$rf_keywords = trim($this->request->getData('rf_keywords'));
// Pagination settings (relevant to the question).
$page = $this->request->getData('page') ? (int)$this->request->getData('page') : 1;
$this->paginate = ['limit' => 200, 'page' => $page];
$finder = $this
->Filters
->find('filters' , [
'rf_keywords' => $rf_keywords
]);
$data = $this
->paginate($finder)
->toArray();
$this->set('data', $data);
}
在我的模板(get_filters. ctp
)中,我有以下内容来输出分页编号(要在页面之间单击的链接)和总数:
<?= $this->Paginator->numbers(); ?>
<?= $this->Paginator->counter([
'format' => 'Page {{page}} of {{pages}}, showing {{current}} records out of
{{count}} total, starting on record {{start}}, ending on {{end}}'
]) ?>
问题是更改Controller中的限制
…
$this->paginate = ['limit' => 200];
…没有正确更新分页的输出。请参阅下面的示例:
'限制'=
第1页,共49页,显示972条记录中的20条,从记录1开始,到20结束
'限制'=
第1页,共10页,显示总共972条中的100条记录,从记录1开始,到100结束
'限制'=
第1页,共10页,显示总共972条中的100条记录,从记录1开始,到100结束
'限制'=
显示页码1-9和:
第1页,共10页,显示总共972条中的100条记录,从记录1开始,到100结束
所以有2个问题:
>
它不适用于任何限制
值
页码链接($this-
getFilters()
的ajax请求是通过jquery发出的,所以我在它们上设置了cache: false,以确保每个请求都附加一个时间戳到URL,以确保它不使用一些旧的缓存响应。
我已经清除了tmp/cache/model/*
中的文件
我在浏览器中强制刷新。尝试了隐身/私人浏览窗口以确保它不是某些会话问题。
这些事情都不能解决问题。
如果分页的page
部分被更改,问题也是一致的。例如使用page=
为什么这不起作用?
编辑-自定义Finder返回正确的数据,所以我认为这不是问题。签名如下,它返回一个通过分页执行的Query对象:
// src/Model/Table/FiltersTable.php
public function findFilters(Query $query, array $options)
{
// $query->find() ...
// ...
return $query;
}
有点晚了,但问题在于CakePHP 3分页的默认maxLimit
设置,默认设置为100(参考下文)。
https://book.cakephp.org/3/en/controllers/components/pagination.html#limit-the-maximum-number-of-rows-per-page
当您将Controller中的设置更新为时,它应该可以做到这一点。
public $paginate = [
// Other keys here.
'maxLimit' => 1000
];