2012-07-14 81 views
0

我有两条类似的路线为我的ZF应用程序设置,其中一条工作,其中一条不工作。这一次,它显示从数据库中以供用户查看一个项目,完美的作品:Zend Framework一条工作路线不是

路线在我的引导:

//Static item profile 
    $route = new Zend_Controller_Router_Route('item/:item_id', 
               array('controller'=> 'item', 
               'action'=> 'index')); 
    $router->addRoute('item', $route); 

而且在那里我得到了项目控制的指数操作的项目编号:

$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'); 

出于某种原因,如果我定位到在这一个ITEM_ID总是出现空/管理/ edititem /:ITEM_ID,虽然它的工作原理如果我转到/ manage/edititem/item_id /:item_id,那完全没问题。如果我尝试使用自定义路线,为什么路线不工作?它不会被更早的路由所捕获,因为它仍在执行edititem操作中的代码,我不会错过任何分号,并且我复制并粘贴它,所以我怀疑它是一个错字。我的路线有什么问题?

+0

在你的控制器中用'$ this-> getFrontController() - > getRouter() - > getCurrentRouteName()'检查你的路由是否匹配。同时检查你的路线以正确的顺序添加(首先是最通用的)。 – ByteNudger 2012-07-15 10:08:07

+0

出于某种原因,它总是默认出现。它不匹配另一条路线,但由于某种原因,它似乎并没有捕捉到这条路线。 – jaimerump 2012-07-15 14:25:03

+0

看起来你的路线没有添加。你可以用'$ this-> getFrontController() - > getRouter() - > getRoutes()'(你应该使用'array_keys()'只打印路由名称)来验证你定义/添加的所有路由是否可用。如果路由不在那里,你应该在'Bootstrap.php'中检查你的代码,因为你可能会覆盖一个变量或者不添加路由。您应该在您的'Bootstrap.php'和控制器中打印名称,以查看是否有更改这两者之间路线的内容。 – ByteNudger 2012-07-15 15:04:51

回答

0

自发布这个问题以来,我改写了几条我的路线,但我相信问题是我在这里设置的名称。

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

我不知道当时的限制,但使用Zend路由器每个名字必须是唯一的,我相信我有2条名为航线当时管理。我的大多数路线仍然是相同的,但现在他们有更多的描述性名称,我不再有这个问题。

0

海梅,

你的代码看起来正确的......我只是测试它在我的本地实例,并重新路由正常工作了

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

这使我觉得问题出在其它地方。我会尝试的第一件事是禁用引导程序中的所有其他路线,并查看是否真的没有冲突。

另一种尝试是使用与item_id不同的字段名称。也许某种程度上,如果路由器管理器有超过1条路由具有相同的字段名称,并且需要传递给控制器​​,那么它会感到困惑。

+0

尝试注释掉其他所有路线,并尝试更改字段名称,但仍然出现相同的错误。这不是一个大问题,因为这只会提供给管理员,但这是一个非常奇怪的问题,我很想知道是什么原因造成的。我相信它必须在我的引导下,但我不知道它是什么。 – jaimerump 2012-07-14 19:29:58

+0

远射,但是你的管理控制器的init()或preDispatch()函数中是否有可能导致这种情况的东西? – 2012-07-14 20:03:01