Cakephp嵌套路由


Cakephp Nested Routes

我有一个名为Items的控制器和另一个名为Categories的控制器。项目可以属于不同的类别。

我拥有的路由是

/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]+"));

问题是第三条路由失败了,因为它路由到Items控制器,它不应该。

如何解决这个问题?

注意你的路由顺序…Cake将匹配到第一个出现,所以试着像这样使用你的路由:

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]+"));
好运

在你的config/routes.php

放一行

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

或类似的

它会将所有的你/项/类别重定向到类别控制器的索引操作。

管理页面(使用admin前缀的操作):

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