【问题标题】:Unable to set named parameter with CakePHP无法使用 CakePHP 设置命名参数
【发布时间】:2013-09-11 21:24:36
【问题描述】:

我正在使用带有自定义路由的 CakePHP 分页助手,但它似乎忽略了页码。我相信这是因为请求中不存在命名参数page,我已经使用debug($this->request->params);进行了验证:

array(
    'plugin' => null,
    'controller' => 'things',
    'action' => 'index',
    'named' => array(),
    'pass' => array(),
    'page' => '2'
)

如您所见,它将page 放在named 数组之外。这是我为自定义分页 URL 定义的路由:

Router::connect('/things/:page', array('controller' => 'skins', 'action' => 'index'), array('page' => '[0-9]+'));

显然,这意味着无论我点击什么页码,都只会显示第一个结果。

如何修改路由以将页面正确插入命名参数数组?我宁愿不直接从控制器直接修改$this->request->params['named']。

【问题讨论】:

    标签: php cakephp pagination


    【解决方案1】:

    根据 CakePHP Book 中的精彩文档:

    如果您计划在路由中使用自定义命名参数,您 必须使用 Router::connectNamed() 让路由器知道它 功能。因此,如果您希望上述路线匹配 url,例如 /cooks/some_action/type:我们做的厨师:

    Router::connectNamed(array('type'));
    Router::connect(
        '/cooks/:action/*', array('controller' => 'users')
    );
    

    http://book.cakephp.org/2.0/en/development/routing.html#routes-configuration

    【讨论】:

    • 我已经用Router::connectNamed(array('page')); 尝试过,但是没有任何区别。此外,文档的那部分还说您可以在每个路由的基础上配置它,这就是我在原始帖子中的代码 sn-p 中所做的。
    • 您在原始帖子中的代码与命名参数无关 - 这只是对另一个(未命名)参数进行正则表达式。
    猜你喜欢
    • 2016-01-04
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    相关资源
    最近更新 更多