2011-04-10 207 views
0

我有一個名爲Items的控制器,另一個叫Categories。項目可能屬於不同的類別。Cakephp嵌套路線

,我有途徑是

/items 
/items/:item_id 
/items/categories 
/items/categories/:category_id 

這是我的routes.php文件

Router::connect('/items', array('controller' => 'items', 'action' => 'index'); 
Router::connect('/items/:item_id', array('controller' => 'items', 'action' => 'view'), array('pass' => array('item_id')), array("item_id" => "[0-9]+")); 
Router::connect('/items/categories', array('controller' => 'categories', 'action' => 'index')); 
Router::connect('/items/categories/:category_id', array('controller' => 'categories', 'action' => 'view', array('pass' => array('category_id')), array("category_id" => "[0-9]+")); 

的問題是,第三路由失敗,因爲它路由到項目控制器,它不該」噸。

我該如何解決這個問題?

回答

4

小心你的路線的順序...蛋糕將匹配到的第一次出現,所以儘量使用像這樣的路線:

Router::connect('/items', array('controller' => 'items', 'action' => 'index'); 
Router::connect('/items/categories', array('controller' => 'categories', 'action' => 'index')); 
Router::connect('/items/categories/:category_id', array('controller' => 'categories', 'action' => 'view', array('pass' => array('category_id')), array("category_id" => "[0-9]+")); 
Router::connect('/items/:item_id', array('controller' => 'items', 'action' => 'view'), array('pass' => array('item_id')), array("item_id" => "[0-9]+")); 

好運

+0

非常感謝。它完成了這項工作。 – 2011-04-10 09:19:07

+2

你通常希望從最貪婪的(最確切的)到最貪婪的列舉它們(例如/ * [catch all]幾乎永遠不會成爲第一條路線,而是有最後一個位置) – dogmatic69 2011-04-10 20:56:13

1
在你的config/routes.php文件

放線

Router::connect('/items/categories', array('controller' => 'categories', 
'action' => 'index')); 

或類似的東西。

它會將您的所有/項目/類別重定向到類別控制器的索引操作。

的管理頁面(使用管理前綴的動作):

Router::connect('/items/categories', array('controller' => 'categories', 
'action' => 'index','admin'=>true)); 
+0

謝謝。這實際上是我在那裏,但它仍然調用項目的視圖操作。我現在將把路線放在問題上。 – 2011-04-10 09:02:28

+0

只是爲了清晰。這些是公共行爲還是管理行爲? – Headshota 2011-04-10 09:05:17

+0

那麼,用戶登錄,他們看到他們的項目和類別。 – 2011-04-10 09:08:21