我在cakephp下的路由方面遇到了一些问题
我的控制器中有三个动作
他们如下
www.example.com/photos/newphotos
www.example.com/photos/random
www.example.com/photos/popular
我希望他们为
www.example.com/newphotos
www.example.com/random
www.example.com/popular
所以我在我写的配置文件下路由文件
Router::connect('/:newphotos', array('controller' => 'photos', 'action' => 'newphotos'));
Router::connect('/:popular', array('controller' => 'photos', 'action' => 'popular'));
Router::connect('/:random', array('controller' => 'photos', 'action' => 'random'));
当我点击网址时,它的工作正常
www.example.com/newphotos
但是当我点击网址www.example.com/random或www.example.com/popular时,它再次指向动作newphotos。
所以如何解决呢?
(换句话说,我需要从每个动作的网址中删除控制器名称“照片”)
非常感谢
答案 0 :(得分:1)
为什么不从路线中移除:
?
如果您想坚持使用/:
路径,则需要向Router::connect()
提供第三个参数,以便为添加的选项指定模式。也就是说,如果您将/:popular
作为第一个参数,则需要array('popular' => 'popular')
作为第三个参数,使规则看起来像:
Router::connect('/:popular', array('controller' => 'photos', 'action' => 'popular'), array('popular' => 'popular'));
这意味着:popular
将与给定的正则表达式匹配,即文字“流行”。有关详细信息,请参阅CakePHP's docs。
然而,这是无用的和愚蠢的,所以你应该坚持没有冒号的路径。
答案 1 :(得分:0)
只需从第一个参数中删除冒号即可。它们是“捕获变量”,因此现在您基本上将所有/
的一些参数路由到photos/newphotos
,并将参数捕获到:newphotos
。因为它总是匹配第一条路线,所以它不会寻找其他路线。