0

我什至不确定如何准确搜索此内容,但我有一个 URL

site.com/forum/controller/action

论坛是一个插件,我目前已经成功地将它路由到插件论坛

Router::connect('/forum', array('plugin' => 'forum', 'controller' => 'home', 'action' => 'index'));

但是,我想添加一条将任何顶级子目录连接到插件论坛的路由。例如,

site.com/fish/controller/action
site.com/bird/controller/action

都会路由到论坛插件。相似地,

site.com/bird

还将路由到论坛插件。这是我能想到的最好的方法,但没有任何效果(我得到“找不到 FishController”:

Router::connect('/*/:controller/:action/*', array('plugin' => 'forum'));

我能找到的最接近的答案基本上说这可能是不可能的?http://cakephp.1045679.n5.nabble.com/Routes-with-wildcards-missing-controller-errors-td1263632.html

编辑:经过更多的试验和错误,我尝试了这个:

Router::connect('/:site/:controller/:action/*', array('plugin' => 'forum'));

它有效。有人可以解释一下吗?

4

1 回答 1

1

http://api.cakephp.org/class/router#method-Routerconnect上的文档很好地解释了这一点。

您所做的是创建了一个自定义参数。Cake 使用一个数组来跟踪参数以及它如何知道哪些控制器、动作和其他参数已被传递。路由器会将任何带有 3 个斜杠 (/) 的 URL 转换为$param['site'],$param['controller']$param['action'].

从您的控制器中,您可以使用 .site 检索 :site 的值$this->params['site']

于 2011-06-19T02:08:15.060 回答