CakePHP 中命名参数的路由配置

Posted

技术标签:

【中文标题】CakePHP 中命名参数的路由配置【英文标题】:Routes configuration for named arguments in CakePHP 【发布时间】:2011-03-17 06:55:17 【问题描述】:

在我的 Cake 应用程序中,我有一个控制器“completed_projects”。它的 index 动作不带参数并列出了一些项目。可以访问不同的页面 example.com/completed_projects/index/page:23

我想让网址是这样的:

example.com/portfolio/page23

显然我需要为此制定一些路线。我试过很多,比如:

Router::connect('/portfolio/page:num', array('controller' => 'completed_projects', 'action' => 'index'), array('pass'=>'page:num', 'num'=>'[0-9]+'));

还有:

Router::connect('/portfolio/:page:num', array('controller' => 'completed_projects', 'action' => 'index'), array('named'=>'num', 'page'=>'page', 'num'=>'[0-9]+'));

我也尝试一次又一次地修改它们,但它们都不能正常工作。

我正在使用 Cakephp 1.3。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:
Router::connect('/portfolio/page:page_num',
    array('controller'=>'completed_projects', 'action'=>'index'),
    array('page_num'=>'[\d]+')
);

在您的控制器中,使用以下命令访问 page_num:

$this->params['page_num'];

【讨论】:

这会将 page_num(如 23)传递给操作,但我希望传递一个命名参数,如传递 page:2。感谢您考虑提供帮助。 再次感谢奥斯卡。您能否详细说明如何将此(或任何)变量用于分页?不需要在控制器中仅获取传递的变量。我希望它被命名为参数(如 page:33),以便它可以用于分页。有可能吗? 啊,你的意思是要改变普通分页器 URL 的样子? 在这种情况下你可能想看看这个,据我所知,没有更干净的方法可以做到这一点:***.com/questions/1078558/…

以上是关于CakePHP 中命名参数的路由配置的主要内容,如果未能解决你的问题,请参考以下文章

解决Web API路由配置支持Area及命名空间参数

使用颤振将多个参数传递给命名路由

具有路由参数和命名路由器出口的延迟加载模块

嵌套路由的命名参数

Flutter 通过命名路由导航直接传递参数

ASP.NET Razor Pages 路由参数命名页面