Cakephp 检索超过限制的页面
Cakephp retrieves pages over limit
我正在使用 cakephp 1.3 分页器,它工作正常,除了这个:
如果我有5页,通过这种方式访问url
我会得到最后一页,但如果我访问
我也得到了最后页。但我不想检索任何值,因为这不是有效页面。
我的配置是这样的:
var $paginate = array(
'Post' => array(
'limit' => 10,
'order' => array('Post.id' => 'desc')
)
);
$posts = $this->paginate('Post');
嗯,不幸的是,它就是这样工作的 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您自己并使用它来验证当前页面。
如果有人对 cakephp 1.3 的这个问题感兴趣,我会根据@ndm 的回答解释我的解决方案。
场景如下
- Paginate 方法效果不佳,因此我需要重写它
- 我不想更新 cake\controller.php 文件,因为当我用最后一个 1.3 分支更新版本时(如果发生的话)我将不得不重新修复它,并且问题是我可能会忘记这样做。
- 我不想在 app_controller 中编写修复代码,因为分页方法太长而且代码感觉很吵。
所以我决定创建一个新的 PageController,它将扩展控制器 class,并将由 AppController 扩展。
在这个文件中,我放入了整个分页方法,并进行了一个简单的修复,就在 @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
{
.....
}
它工作得很好,我可以毫不犹豫地更新蛋糕php 1.3 版本(如果有的话再次更新),也不会看到丑陋的分页方法的编码。
希望对您有所帮助
我正在使用 cakephp 1.3 分页器,它工作正常,除了这个:
如果我有5页,通过这种方式访问url
我会得到最后一页,但如果我访问
我也得到了最后页。但我不想检索任何值,因为这不是有效页面。
我的配置是这样的:
var $paginate = array(
'Post' => array(
'limit' => 10,
'order' => array('Post.id' => 'desc')
)
);
$posts = $this->paginate('Post');
嗯,不幸的是,它就是这样工作的 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您自己并使用它来验证当前页面。
如果有人对 cakephp 1.3 的这个问题感兴趣,我会根据@ndm 的回答解释我的解决方案。
场景如下
- Paginate 方法效果不佳,因此我需要重写它
- 我不想更新 cake\controller.php 文件,因为当我用最后一个 1.3 分支更新版本时(如果发生的话)我将不得不重新修复它,并且问题是我可能会忘记这样做。
- 我不想在 app_controller 中编写修复代码,因为分页方法太长而且代码感觉很吵。
所以我决定创建一个新的 PageController,它将扩展控制器 class,并将由 AppController 扩展。
在这个文件中,我放入了整个分页方法,并进行了一个简单的修复,就在 @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
{
.....
}
它工作得很好,我可以毫不犹豫地更新蛋糕php 1.3 版本(如果有的话再次更新),也不会看到丑陋的分页方法的编码。
希望对您有所帮助