Cakephp 指定页码时找不到分页器

Cakephp 指定页码时找不到分页器,cakephp,pagination,Cakephp,Pagination,我在Usergals控制器中手动设置CakePHP分页值,就像这样,以便在Usergal视图上对相关模型(TreasuresUsergal)进行分页。以下是UsergalController中的简化代码段: public function view($id = null) { $this->loadModel('TreasuresUsergal'); $options['joins'] = array( array('table' => 'treasures',

我在Usergals控制器中手动设置CakePHP分页值,就像这样,以便在Usergal视图上对相关模型(TreasuresUsergal)进行分页。以下是UsergalController中的简化代码段:

public function view($id = null) {

$this->loadModel('TreasuresUsergal');
    $options['joins'] = array(
    array('table' => 'treasures',
    'alias' => 'Treasure2',
    'type' => 'LEFT',
    'conditions' => array(
        'Treasure2.id = TreasuresUsergal.treasure_id',
        )
        )
    );

    $options['conditions']=array('TreasuresUsergal.usergal_id'=>$id);
    $options['fields']=array('Treasure2.*','TreasuresUsergal.ord','TreasuresUsergal.comments');
    $options['order']=array('TreasuresUsergal.ord'=>'asc');
    $options['limit']=$limit;
    $this->Paginator->settings = $options;
    $treasures=$this->Paginator->paginate('TreasuresUsergal');
    $this->set('treasures',$treasures);

}
因此,在上面的示例中,$id是从URL传递给view函数的值。这里有一个活生生的例子:

正如您所看到的,它只适用于单个页面。但是,今天我在视图中测试了分页器,发现“下一步”按钮不起作用。计数器、排序和页码都正确加载-但只要传递实际命名参数“Page:n”(当n大于1时),我就会得到一个未找到的页面,并出现以下错误:

Not Found

Error: The requested address '/usergals/view/20/page:2?url=%2Fusergals%2Fview%2F20' was not found on this server.
我一定错过了一些简单的东西——我已经尝试过一些路线,但还没能弄明白。或者我缺少一些分页器选项?或者,当它不是的时候,它是否认为它超出了边界

更新/解决方案

经过一番周折,我想出了这个解决办法。虽然没有我想的那么好,但这里是基本的想法(可以添加错误处理等)

首先,我在beforeFilter中添加了一个检查,以查看是否设置了页面参数。如果是这样,我将其更改为“p”参数并重定向

我在这里这样做是因为在其他方面,我遇到了NotFound异常的问题(参见底部的注释)。因此,在beforeFilter中:

if (isset($this->params['named']['page'])){
    $newurl=$this->params['named'];
    $pg=$newurl['page'];
    unset($newurl['page']);
    $newurl['p']=$pg;
    $this->redirect(array('action' => 'view/'.$this->params['pass'][0])+$newurl);
}
然后,在同一控制器的“查看”功能中,我添加了此选项以及其他分页器选项:

if (isset($this->params['named']['p'])) $options['page']=$this->params['named']['p'];
这样,标准分页器行为在视图中似乎可以正常工作。上一个、下一个等

如果有人有更好的建议,我很乐意听。我不喜欢必须重定向的想法,但它现在起作用了

值得注意的是,添加此代码(甚至只是为了实验)导致我的所有分页计数停止工作。调试中的查询正确,但显示的计数错误:

try {
        $this->Paginator->paginate();
    } catch (NotFoundException $e) {

        }

这美元限额是从哪里来的?此外,我也不确定这是否是一个好的方式:“宝库2.*”您是否尝试过编写每个宝库2。语句,我知道这会很费时,但只是为了确保(*)字符没有在您的查询周围混乱。谢谢您的评论。我应该提到我把$limit硬编码为100——我只是计划有一天它会成为一个变量,所以我就这样做了。查看我的更新以了解我一直在策划的解决方案。