Zend Framework一条路线工作一条路线没有

时间:2012-07-14 17:31:54

标签: zend-framework routing zend-route

我为我的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动作中的代码,我不会错过它上面的任何分号,我复制并粘贴它,所以我怀疑这是一个错字。我的路线有什么问题?

2 个答案:

答案 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的路由。我的大部分路线仍然相同,但现在它们有更多的描述性名称,我不再遇到这个问题了。