CakePHP分页最后一页永远不会结束


CakePHP paginate last page never ends

我对Cake(1.3)分页限制器有一个问题,下面是代码:

$page = (!empty($this->params['form']['page'])) ? $this->params['form']['page'] : 1 ;
# Consulta        
$this->paginate = array('limit' => $limit, 'page' => 555, 'order' => array('Candidate.id' => 'ASC'), 'conditions' => $conditions);
$data = $this->paginate('Candidate');

当我发送页面第1、2、3行,等等。工作正常,但如果结果有6页,我发送第7,8或999999页的查询返回给我第6页,这是正确的吗?

我认为查询发送给我的是一个空数组而不是最后一页无限。

当页面不存在时,是否有方法强制不发送任何内容?

这就是CakePHP分页的工作原理。

如果你想要不同的行为,你必须在控制器动作中捕获$this->params['named']['page'];值,并决定它是否是一个无效的数字,然后返回你想要的空页面,而不是允许CakePHP使用其默认的

例如

public function index() {
    $maxPage = 6; // need to calculate the max page value somehow
    if ($this->params['named']['page'] > $maxPage) {
        $rows = array();
    } else {
        $rows = $this->paginate('Model');
    }
    $this->set('rows', $rows);
}

在CakePHP 1.3中,这是默认行为。这只在CakePHP 2.3中改变了,正如书中提到的:

从2.3开始,PaginatorComponent会在试图访问不存在的页面时抛出NotFoundException,即请求的页数大于总页数。

因此,您可以让正常的错误页面被呈现,或者使用try catch块,并在捕获NotFoundException时采取适当的操作。

如果你真的不想让不存在的页面显示任何东西,你可以在你的控制器中添加一些自定义代码来呈现错误页面。