0

我为我的 ZF 应用程序设置了 2 条类似的路线,其中一条有效,另一条无效。这个显示数据库中的项目供用户查看,效果很好:

在我的引导程序中路由:

//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 总是为空,但如果我转到 /manage/edititem/item_id/:item_id,它工作得非常好。如果我尝试使用自定义路由,为什么路由不起作用?它没有被更早的路线捕获,因为它仍在执行 edititem 操作中的代码,我没有遗漏它上面的任何分号,我复制并粘贴了它,所以我怀疑这是一个错字。我的路线可能有什么问题?

4

2 回答 2

0

自从发布这个问题以来,我已经重写了几条路线,但我相信问题出在我在这里设置的名称上。

$router->addRoute('manage', $route);

当时我不知道这个限制,但是对于 zend 路由器,每个名称都必须是唯一的,我相信当时我有 2 条名为 manage 的路由。我的大多数路线仍然是相同的,但它们现在有更多描述性的名称,我不再遇到这个问题。

于 2012-08-12T13:40:54.093 回答
0

海梅,

您的代码看起来正确...我刚刚在我的本地实例上对其进行了测试,并且重新路由适用于

$route = new Zend_Controller_Router_Route('manage/edititem/:item_id',array('controller'=> 'manage','action'=> 'edititem'));

这使我认为问题出在其他地方。我要尝试的第一件事是禁用引导程序中的所有其他路由,看看那里是否真的没有冲突。

另一个要尝试的方法是使用与 item_id 不同的字段名称。如果有超过 1 个具有相同字段名称的路由需要传递给控制器​​,那么路由器管理器可能会不知何故感到困惑。

于 2012-07-14T19:08:13.510 回答