我显然对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')
)); ?>
我在这里做错了什么?
答案 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' => '/'
)
);
我想你知道它为什么会起作用;)