2012-07-14 78 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