我正在使用cakephp 1.3 paginator,它工作正常,除了这个:
如果我有5页,可以通过这种网址访问
我将获得最后一页,但如果我访问
我也获得最后页面。但我想不检索任何值,因为它不是有效的页面。
我的配置是这样的:
var $paginate = array(
'Post' => array(
'limit' => 10,
'order' => array('Post.id' => 'desc')
)
);
$posts = $this->paginate('Post');
答案 0 :(得分:1)
嗯,遗憾的是它是如何运作的until CakePHP 2.3,它被埋在Controller::paginate()
方法的中间:
<强> https://github.com/cakephp/cakephp/blob/1.3.20/cake/libs/controller/controller.php#L1214-L1215 强>
// ...
if ($page === 'last' || $page >= $pageCount) {
$options['page'] = $page = $pageCount;
// ...
所以你自己只有一个选项calculate the page count,并用它来验证当前页面。
答案 1 :(得分:0)
如果有人对cakephp 1.3的这个问题感兴趣,我将根据@ndm回答解释我的解决方案。
方案如下
所以我决定创建一个新的PageController,它将扩展Controller类,并将由AppController进行扩展。
在这个文件中,我放了WHOLE paginate方法,并在@ndm提到之前做了一个简单的修复:
if ($page >= $pageCount)
{
return array(); //return empty array, so no rows found.
}
if ($page === 'last') {
$options['page'] = $page = $pageCount;
} elseif (intval($page) < 1) {
$options['page'] = $page = 1;
}
最后我用include来帮助AppController找到PagerController:
<?php
include("pager_controller.php");
class AppController extends PagerController
{
.....
}
它工作得很好,我可以毫不犹豫地更新cakephp 1.3版本(再次发生),也没有看到丑陋的paginate方法的编码。
希望它可以帮助你