PaginatorHelper没有检查页码

时间:2012-11-30 10:31:55

标签: cakephp view-helpers paginator cakephp-2.3

我对Cakephp2.3 paginator helper有问题。在1.3版本中,paginate方法检查传递的页面参数是否具有正确的值。现在,它已不再适用了。

例如,如果我有一个包含30个结果的列表,每页10个项目,那么这将重定向到最后一个(第三个)页面:

mycontroller/index/page:130

现在,当我直接在浏览器中修改网址并传递无效的网页编号时,它只是说没有结果。

这就是我使用paginate方法的方法:

$this->paginate = array(
                'limit' => 10,
                'order' => 'Appointment.start_datetime DESC'
            );
$appointments = $this->paginate('Appointment');

有什么我想念的吗?

提前谢谢。

更新

paginator helper确实知道如何计算核心数量,但似乎并不关心是否传递了正确的页码。以下是视图的输出:

print_r($this->Paginator->params());

所示:

Array
(
    [page] => 1
    [current] => 10
    [count] => 30
    [prevPage] => 
    [nextPage] => 1
    [pageCount] => 3
    [order] => Appointment.start_datetime DESC
    [limit] => 10
    [options] => Array
        (
            [page] => 1
        )

    [paramType] => named
)

2 个答案:

答案 0 :(得分:1)

似乎两个Cake版本都包含一些代码来处理过高的page参数:

Cake 1.3:Controller->paginate()

if ($page === 'last' || $page >= $pageCount) {
    $options['page'] = $page = $pageCount;
} elseif (intval($page) < 1) {
    $options['page'] = $page = 1;
}

蛋糕2.3:PaginatorComponent->paginate()

$pageCount = intval(ceil($count / $limit));
$page = max(min($page, $pageCount), 1);

但有趣的是,在Cake 2.3中,此代码在<{1}}的调用之后被置于,因此来不及正确获取记录。这可能是一个永远不会发出信号的错误。

答案 1 :(得分:0)

我没有任何使用paginator的应用程序,所以这将是盲目的。你可以这样做:

$page_count = $this->Paginator->params['paginator']['count'];
$page_requested = $this->request->params['paginator']['page'];

if($page_requested > $page_count){
    //Redirect to last page .....
}

虽然,我发现很难相信他们会在2.x中删除这个默认功能。

我会做一个pr($this->params);来获取你需要的paginator对象中的确切索引。