【问题标题】:CakePHP: How to route Pagination's sort parameters?CakePHP:如何路由分页的排序参数?
【发布时间】:2011-05-05 11:34:37
【问题描述】:

所以我正在尝试使用分页器和自定义路由对我的索引页面上的项目进行分页。这一切都是通过索引操作,但索引操作可以显示按最新、投票、活跃或视图排序的项目。现在,URL 如下所示:

items/index/sort:created/direction:desc

如果你不在第一页,它看起来像这样:

items/index/sort:created/direction:desc/page:2

我想用路由器让它看起来像这样:

newest/

我可以通过这条路线走那么远:

  Router::connect(
    '/newest/*',
    array('controller'=>'items', 'action'=>'index', 'sort'=>'created', 'direction'=>'desc')
);

但是,寻呼机链接不遵循该路线。点击下一页后,您将返回:

items/index/sort:created/direction:desc/page:2

我怎样才能让它跟随路由器并给我我想要的东西?请记住,这一切都来自同一个控制器动作,我正在尝试路由分页的排序参数。

【问题讨论】:

    标签: php cakephp pagination


    【解决方案1】:

    对我来说,您的代码正在运行(我已经测试了您的示例)。您是否对分页器助手做了一些不寻常的事情?

    这是我的路线:

    Router::connect('/newest/*',array('controller'=>'tests', 'action'=>'index', 'sort'=>'age', 'direction'=>'desc'));
    Router::connect('/oldest/*',array('controller'=>'tests', 'action'=>'index', 'sort'=>'age', 'direction'=>'asc'));
    

    这是我在按年龄列排序时看到的网址:

    http://localhost/cakephp/1.3.0/newest/page:1
    http://localhost/cakephp/1.3.0/newest/page:2
    http://localhost/cakephp/1.3.0/newest/page:3
    

    最老的:

    http://localhost/cakephp/1.3.0/oldest/page:1
    http://localhost/cakephp/1.3.0/oldest/page:2
    http://localhost/cakephp/1.3.0/oldest/page:3
    

    它适用于寻呼机中的所有链接(第一个、上一个、1、2、3 下一个、最后一个)。

    【讨论】:

    • 我使用的是 cakephp 1.3.4,这个功能有可能在各个版本中被破坏了吗?
    • 不,我已经用 1.3.0 进行了测试,但后来我用 1.3.4 和 1.3.5 进行了测试,在所有情况下它们都按预期工作。
    • 很奇怪。我想知道我的实现是否有问题。这不是我第一次遇到其他人无法重现的东西。
    • 好的,我更新到 1.3.6 并修复了它。我不知道之前发生了什么。也许我搞砸了。
    【解决方案2】:

    你想包括我认为传递的参数。像这样的,

    $this->params = $this->passedArgs();
    

    也可以在这里查看,http://book.cakephp.org/view/46/Routes-Configuration

    否则我会扩展 HTML Helper 以创建自己的链接方法,该方法从 url 读取参数并相应地创建链接。然后你可以从你自己的助手管理你自己的链接:)

    不要忘记您需要在 index 操作中进行检查以处理此问题。就我个人而言,我更倾向于在控制器中为每一个创建一个动作。

    function newest(){
    
    }
    function votes(){
    
    }
    function active(){
    
    }
    
    //etc
    

    【讨论】:

    • 我相信 Daniel 要求的是别的东西:Cake 非常聪明,如果您创建一个指向具有匹配路由条目的控制器/动作的链接,cake 会用路由简写代替 url。但这似乎不适用于分页 url-s。
    • 如果您为它们创建单独的操作,您最终只会复制代码。
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 2012-07-01
    • 2012-01-02
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    相关资源
    最近更新 更多