CakePHP - 使用通配符路由(找不到控制器错误)

时间:2011-06-18 23:36:12

标签: php cakephp url-routing cakephp-routing

我真的不确定如何搜索这个,但我有一个网址

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'));

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

1 个答案:

答案 0 :(得分:1)

http://api.cakephp.org/class/router#method-Routerconnect处的文档在解释这一点方面做得很好。

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

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