【问题标题】:cakephp routing for order and pagination用于订单和分页的 cakephp 路由
【发布时间】:2012-09-18 10:28:07
【问题描述】:

我正在尝试在 CakePHP 中为我的控制器进行路由。

我的控制器名为 UserGames。 默认 CakePHP 排序代码:

<?php echo $this->Paginator->sort('price'); ?>

默认情况下,排序链接如下所示:userGames/index/sort:name/direction:asc

我添加了以下路由规则:

Router::connect('/games', array('controller' => 'UserGames', 'action' => 'index'));
Router::connect('/games/:sort/:direction', array('controller' => 'UserGames'));

使用这些排序链接会生成如下 URL:games/name/asc

排序不能以这种方式工作,并且 $this->PassedArgs 是空的。我的错误是什么?

【问题讨论】:

    标签: cakephp sorting routing


    【解决方案1】:

    如果您希望命名参数可用作passedArgs 中的传递参数,您需要为您的第二个Router::connect 调用提供第三个参数。

    Router::connect('/games/:sort/:direction',
        array('controller' => 'UserGames'),
        array('pass' => array('sort', 'direction')));
    

    在这种情况下,$this-&gt;passedArgs[0] 将是排序值,$this-&gt;passedArgs[1] 将是方向值。

    请参阅the CakePHP docs 了解更多信息。

    【讨论】:

    • 是的,但是如何告诉 cake php 将这个 args 传递给分页器?
    • 为了让 Paginator 提取它们,它们必须被命名或查询字符串参数。由于您要摆脱命名参数,我不确定是否有办法使用命名参数来做到这一点。但是您也许可以将它们转换为查询字符串参数。您可以尝试'?' =&gt; array('sort', 'direction') 而不是'pass',但我不确定它是否会获取这些值。如果这样做,则必须在设置 $paginate 时指定 'paramType' =&gt; 'querystring'。见this
    猜你喜欢
    • 2012-07-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2011-04-04
    • 2012-06-27
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多