2

我显然对 CakePHP 中的分页是如何工作的有一个根本性的误解。

我设置了以下路线,显示一个类别中的所有帖子:

Router::connect('/:parent/:category', 
            array('controller' => 'posts', 'action' => 'viewCategory'), 
            array('parent' => '[a-z0-9-]+', 'category' => '[a-z0-9-]+'));

页面工作正常,但是分页助手输出错误的分页链接。

我正在使用$this->Paginator->numbers().

它以这种格式输出链接:mysite.com/posts/viewCategory?page=2

而不是这样:mysite.com/parent-category/sub-category?page=2

我尝试在第一个路由之后添加以下路由,但它仍然不起作用:

Router::connect('/:parent/:category/:page', 
      array('controller' => 'posts', 'action' => 'viewCategory'), 
      array('parent' => '[a-z0-9-]+', 
            'category' => '[a-z0-9-]+', 
             'page' => '[0-9]+'));

作为参考,我在视图中设置的分页选项如下:

<?php $this->Paginator->options(
           array('url' => 
               array('controller' => 'posts', 'action' => 'viewCategory')
  )); ?>

我在这里做错了什么?

4

2 回答 2

1

您正在自己设置网址

这是您的分页器选项调用:

<?php 
$this->Paginator->options(array(
    'url' => array(
        'controller' => 'posts', 
        'action' => 'viewCategory'
    )
));
?>

您在哪里覆盖当前网址 - 并明确要求分页器使用“/posts/viewCategory”网址(不带参数)作为其基本网址。

只是不要定义网址

只需不要调用选项,助手将使用当前 url - 这应该意味着如果当前 url 是:

/parent-category/sub-category

然后第 2 页将是(假设您使用的是使用 GET 参数而不是命名参数paramType选项):

/parent-category/sub-category?page=2

如果不是这种情况,则问题中缺少信息;区分“未使用虚路由”和“url 不等效(当前情况)非常重要。

于 2013-07-04T09:11:00.387 回答
0

刚刚进行了一场修复类似问题的战斗,并遇到了这篇文章。虽然老了,但我认为我的答案可能会节省我必须花时间修复它的时间。

基本上,您需要做的是在 Paginator->numbers() 之前调用 Paginator->options(),因此:

$this->Paginator->options(
    array(
        'controller' => 'parent-category',
        'action' => 'sub-category'
    )
);

虽然控制器和动作不存在,但它只是欺骗 CakePHP 以“原样”使用它们,因为反向路由不起作用!

对于那些(像我一样)想要设置类似的路线的人

Router::connect(
    '/go/page:id', 
    array(
        'controller' => 'blog', 
        'action' => 'paginated'
    )
);

设置分页器选项可能有困难。然而,这对我有用:

$this->Paginator->options(
    array(
        'controller' => 'go',
        'action' => '/'
    )
);

我想你知道它为什么起作用;)

于 2014-08-02T17:35:22.393 回答