2009-10-08 16 views
1

我有兩條路徑匹配具有相同外觀模式的url,不同之處在於$ actionRoute,只有當變量:action對應於'myaction'時,纔會匹配。Zend_Router需求不匹配

如果我去/en/mypage/whatever/myaction它按預期通過$ actionRoute。
如果我去/en/mypage/whatever/blahblah它會被$ actionRoute拒絕並且被$ genRoute匹配。
如果我去/EN /我的空間/不管應該由$ genRoute匹配,但它得到了$ actionRoute不是拋出和異常,因爲動作noactionAction()不存在匹配。

不知道我做錯了什麼,我會很感激你的幫助。

 $genRoute = new Zend_Controller_Router_Route(
    ':lang/mypage/:var1/:var2', 
    array(
    'lang' => '', 
    'module' => 'mymodule', 
    'controller' => 'index', 
    'action' => 'index', 
    'var1' => 'noone', 
    'var2' => 'no' 
    ), 
    array(
    'var1' => '[a-z\-]+?', 
    'lang' => '(es|en|fr|de){1}' 
    ) 
); 
    $actionRoute = new Zend_Controller_Router_Route(
    ':lang/mypage/:var1/:action', 
    array(
    'lang' => '', 
    'module' => 'mymodule', 
    'controller' => 'index', 
    'action' => 'noaction', 
    'var1' => 'noone', 
    ), 
    array(
    'action' => '(myaction)+?', 
    'var' => '[a-z\-]+?', 
    'lang' => '(es|en|fr|de){1}', 
    ) 
); 
    $router->addRoute('genroute',$genRoute); 
    $router->addRoute('actionroute',$actionRoute); 

回答

0

通過爲行動在$ actionRoute提供一個默認值(「無動作」),你製作的變量可選。如果你刪除它應該都工作正常。另外,第二條路線中正則表達式模式中的'var'鍵可能應該是'var1',因爲它是第一個。

所以,你可能希望你的第二個途徑是:

$actionRoute = new Zend_Controller_Router_Route(
    ':lang/mypage/:var1/:action', 
    array(
    'lang' => '', 
    'module' => 'mymodule', 
    'controller' => 'index', 
    'var1' => 'noone', 
    ), 
    array(
    'action' => '(myaction)+?', 
    'var1' => '[a-z\-]+?', 
    'lang' => '(es|en|fr|de){1}', 
    ) 
); 
+0

喜添,這是行不通的,它拋出一個異常與「未規定動作」的消息。 無論如何感謝。 – elbicho 2009-10-08 14:48:08

+0

奇怪的是,我測試了你的示例代碼,它確實適用於我。你使用什麼版本的ZF?另外一個哈克的解決辦法是更換:在您的$ actionRoute「myaction」行動,刪除正則表達式的動作和硬編碼的動作「myaction」第一陣列英寸 – 2009-10-08 15:58:02

+0

我正在使用1.8.4PL1 – elbicho 2009-10-09 07:29:48