我希望能够在CakePHP 2.0中路由类似以下的内容:
domain.com/london
domain.com/milton keynes
到特定的控制器和行动。
应用程序有多个控制器,因此如果提供的参数与控制器名称不匹配,它应该只使用此路由。
我通过将以下代码添加到config/routes.php
Router::connect(
'/:location',
array('controller' => 'articles', 'action' => 'testing'),
array('pass' => array('location'), 'location' => '[a-z ]+')
);
将此代码与CakePHP 2.0一起使用只有在我从require
注释掉config/routes.php
行时才有效,但随后我松开了默认路由,以便指向任何其他控制器的URL被此捕获。
如何实现所需的路由?
答案 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')
)
);
}