我对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时采取适当的操作。
如果你真的不想让不存在的页面显示任何东西,你可以在你的控制器中添加一些自定义代码来呈现错误页面。