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

时间:2014-03-05 14:39:00

标签: 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('/: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。

所以如何解决呢?

(换句话说,我需要从每个动作的网址中删除控制器名称“照片”)

非常感谢

2 个答案:

答案 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。因为它总是匹配第一条路线,所以它不会寻找其他路线。