2014-03-05 44 views
0

我面對下CakePHP的路由的一些問題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。

所以我怎麼能解決這個問題

(換句話說,我需要從URL將控制器名爲「照片」的每一個動作)

非常感謝

回答

1

爲什麼不從刪除:路線?

如果您想堅持使用/:路徑,那麼您需要提供第三個參數給Router::connect(),以在其中指定添加選項的模式。也就是說,如果你有/:popular作爲第一個參數,你就需要array('popular' => 'popular')作爲第三個參數,使該規則是這樣的:

Router::connect('/:popular', array('controller' => 'photos', 'action' => 'popular'), array('popular' => 'popular')); 

這意味着:popular將針對給定的正則表達式匹配,這是字面'流行'。有關更多信息,請參閱CakePHP's docs

然而,這是無用的和愚蠢的,所以你應該堅持沒有冒號的路徑。

+0

非常感謝你:) – user3054209

0

只需從第一個參數中刪除冒號即可。它們有點「捕捉變量」,所以現在你基本上都將一些參數/路由到photos/newphotos,參數被捕獲到:newphotos。因爲它總是會匹配第一條路線,所以它不會尋找其他路線。

相關問題