2010-01-15 196 views
1

我已經定義了2個自定義路由。一個用於threads/:id/:name,另一個用於threads/tags/:tagName但是第二個與第一個衝突,因爲如果我啓用兩個然後第一個休息並將:id字面上看作是一個動作,而不是遵守\d+要求(我也嘗試使用純正則表達式路由,請參見底部) 。Zend路由衝突

行動「1」不存在,並沒有 被困在__call()

我試圖路由的重新排列順序,但如果我這樣做,那麼threads/tags/:tagName犯規正確捕捉標籤名。

我也嘗試禁用默認路由,但路由仍然不正常工作後。

這是我的路線初始化函數:

protected function _initRoutes() { 
$fc = Zend_Controller_Front::getInstance(); 
$router = $fc->getRouter(); 



$router->addRoute(
    'threads', 
    new Zend_Controller_Router_Route('threads/:id/:name', 
    array(
     'controller' => 'threads', 
     'action'  => 'thread', 
    ), 
    array(
     'id' => '\d+' 
    ) 
    ) 
); 


$router->addRoute(
    'threads', 
    new Zend_Controller_Router_Route('threads/tags/:tagName', 
    array(
     'controller' => 'threads', 
     'action'  => 'tags', 
    ), 
    array(
     'tagName' => '[a-zA-Z]+' 
    ) 
    ) 
); 


} 

我也使用正則表達式的純路徑嘗試,但沒有成功,很可能是因爲我沒有錯:

$router->addRoute(

    'threads', 

    new Zend_Controller_Router_Route_Regex(
    'threads/(\d+)/([a-zA-Z]+)', 
    array(
     'controller' => 'threads', 
     'action'  => 'thread', 
    ), 
    array(
     1 => 'tagName', 
     2 => 'name' 
    ) 
    ) 
); 

回答

0

解決。

啊,傻我。 addRoute的第一個參數需要是唯一的名稱,並且不像我所假設的那樣直接與控制器相對應。

感謝d__asmoka,lutinvert on #zftalk。我會盡快接受(最少2天)。