我为我的ZF应用程序设置了两条类似的路由,其中一条有效,另一条没有。这个显示数据库中的项目供用户查看,完美地运行:
在我的引导程序中路由:
//Static item profile
$route = new Zend_Controller_Router_Route('item/:item_id',
array('controller'=> 'item',
'action'=> 'index'));
$router->addRoute('item', $route);
我在项目控制器的索引操作中获取项目ID:
$id = $this->getRequest()->getParam('item_id');
我在后端设置了这个,以允许管理员编辑项目数据:
//Management back end
$route = new Zend_Controller_Router_Route('manage/edititem/:item_id',
array('controller'=> 'manage',
'action'=> 'edititem'));
$router->addRoute('manage', $route);
这是我在管理控制器的edititem操作中获取id的地方:
$item_id = $this->getRequest()->getParam('item_id');
出于某种原因,如果我导航到/ manage / edititem /:item_id,那么这一项中的item_id总是为null,尽管如果我去/ manage / edititem / item_id /:item_id它会完全正常。如果我尝试使用自定义路线,为什么路线不起作用?它不会被早期路由捕获,因为它仍在执行edititem动作中的代码,我不会错过它上面的任何分号,我复制并粘贴它,所以我怀疑这是一个错字。我的路线有什么问题?
答案 0 :(得分:0)
雅伊梅
您的代码看起来正确...我刚刚在我的本地实例上测试过,并且重新路由正常工作
$route = new Zend_Controller_Router_Route('manage/edititem/:item_id',array('controller'=> 'manage','action'=> 'edititem'));
这让我觉得问题出在其他地方。我要尝试的第一件事是禁用引导程序中的所有其他路由,并查看那里是否真的没有冲突。
要尝试的另一个方法是使用与item_id不同的字段名称。也许某种程度上,如果有多个路由具有相同的字段名称需要传递给控制器,路由器管理器就会感到困惑。
答案 1 :(得分:0)
自发布此问题以来,我已经重写了几条路线,但我相信这个问题就是我在这里设置的名称。
$router->addRoute('manage', $route);
我当时并不知道这个限制,但是使用zend路由器,每个名称都必须是唯一的,我相信我当时有两条名为manage的路由。我的大部分路线仍然相同,但现在它们有更多的描述性名称,我不再遇到这个问题了。