0

我对 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 页返回给我,它是否正确?

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

当页面不存在时,有什么方法可以强制发送任何内容?

4

2 回答 2

1

这就是 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);
}
于 2013-04-30T10:23:48.447 回答
0

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

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

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

如果您真的不希望不存在的页面显示任何内容,您可以随时向您的控制器添加一些自定义代码来呈现错误页面。

于 2013-04-30T10:28:18.130 回答