CakePHP路由始终指向相同的操作

CakePHP路由始终指向相同的操作,php,cakephp,routes,Php,Cakephp,Routes,我在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(

我在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'));
当我点击url时,它工作正常 www.example.com/newphotos

但当我点击url www.example.com/random或www.example.com/popular时,它再次指向action newphotos

那我怎么解决呢

(换句话说,对于每个操作,我需要从url中删除控制器名称“照片”)


非常感谢

为什么不从路由中删除

如果您想坚持使用
/:
路径,则需要向
路由器::connect()
提供第三个参数,以便为添加的选项指定模式。也就是说,如果将
/:popular
作为第一个参数,则需要将
数组('popular'=>'popular')
作为第三个参数,使规则看起来像:

Router::connect('/:popular', array('controller' => 'photos', 'action' => 'popular'), array('popular' => 'popular'));
这意味着
:popular
将与给定的正则表达式匹配,即文字“popular”。有关更多信息,请参阅


然而,这是无用且愚蠢的,因此您应该坚持使用没有冒号的路径。

只需从第一个参数中删除冒号即可。它们是一种“捕获变量”,因此现在您基本上是将带有一些参数的所有
/
路由到
照片/newphotos
,并将捕获的参数路由到
:newphotos
。因为它总是匹配第一条路线,所以它不会寻找其他路线。

非常感谢:)