为域/参数配置CakePHP 2.0路由(不带控制器名称)

时间:2011-10-31 21:12:21

标签: cakephp routes cakephp-2.0

我希望能够在CakePHP 2.0中路由类似以下的内容:

domain.com/london
domain.com/milton keynes

到特定的控制器和行动。

应用程序有多个控制器,因此如果提供的参数与控制器名称不匹配,它应该只使用此路由。 我通过将以下代码添加到config/routes.php

的底部,使用CakePHP 1.3.12实现了这一点
Router::connect(
  '/:location',
  array('controller' => 'articles', 'action' => 'testing'),
  array('pass' => array('location'), 'location' => '[a-z ]+')
);

将此代码与CakePHP 2.0一起使用只有在我从require注释掉config/routes.php行时才有效,但随后我松开了默认路由,以便指向任何其他控制器的URL被此捕获。

如何实现所需的路由?

2 个答案:

答案 0 :(得分:1)

据我所知,这也不适用于Cake 1.3,只是因为你的[a-z ]+正则表达式也匹配简单/ controller_name路由的情况;路由器无法区分这两者,因此总是路由到它遇到的那个。

但是,您可以创建自定义路由类来实现此目的。 Mark Story(其中一个Cake开发者)很久以前写了一篇关于它的优秀帖子,它适用于Cake 1.3,但你可以很容易地将原理应用到2.0(我知道因为我在我的2.0应用程序中使用它)。您可以找到帖子here

答案 1 :(得分:0)

这可能无法回答上面提到的具体问题,但它是相关的,此页面出现在搜索结果中,我的目标是保存找到它的人(包括我未来的我猜)一段时间不必研究我的内容刚刚研究过。

我需要为不同的域添加带有参数的路由。例如,example.com应该像往常一样,而example.org/some_page应该直接路由到特定的控制器和操作。所以我已将以下内容添加到Config/routes.php

if ( CakeRequest::host()=='example.org' ) {
    Router::connect('/:my_variable', 
        array(
            'controller'=>'my_controller', 
            'action'=>'my_action'
        ),
        array(
            'my_variable'=>'[a-zA-Z-0-9 ]+', 
            'pass'=>array('my_variable')
        )
    );
}