CakePHP在自定义路线上的分页

时间:2013-07-03 21:39:00

标签: php cakephp pagination

我显然对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')
  )); ?>

我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

您自己设置了网址

这是您的分页选项调用:

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

你覆盖当前网址的地方 - 并明确要求分页器使用'/ posts / viewCategory'网址(没有参数)作为基础网址。

只是不要定义网址

只是不调用选项,帮助程序将使用当前网址 - 这应该意味着如果当前网址是:

/parent-category/sub-category

然后第2页将是(假设您使用the paramType option来使用GET参数而不是命名参数):

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

如果情况并非如此,则问题中缺少信息;区分“未使用的虚荣路线”和“网址不相等(当前情况)”非常重要。

答案 1 :(得分:0)

刚刚进行了类似的战斗,并发现了这篇文章。虽然年纪大了,但我认为我的答案可能会节省一些时间,我不得不花时间修理它。

基本上,你需要做的是在Paginator-&gt; numbers()之前调用Paginator-&gt; options(),因此:

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

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

对于那些(像我一样),谁想要设置类似于

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

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

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

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