【问题标题】:CakePHP pagination on custom route自定义路由上的 CakePHP 分页
【发布时间】:2013-07-03 21:39:00
【问题描述】:

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

我在这里做错了什么?

【问题讨论】:

  • 使用分页时,url 应该看起来像mysite.com/posts/viewCategory/page:2。

标签: php cakephp pagination


【解决方案1】:

你自己设置网址

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

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

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

只是不要定义网址

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

/parent-category/sub-category

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

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

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

【讨论】:

  • 我已经尝试完全删除options(),但没有成功,它仍然继续分页到posts/viewCategory。不过我最后还是修好了。
  • 你是怎么做到的 ;)?请将其添加为答案并接受。
【解决方案2】:

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

基本上,您需要做的是在 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' => '/'
    )
);

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

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 2011-04-04
    • 2012-10-06
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多