2011-08-21 57 views
0

我正在開發一個多語言Zend項目。我創建的活動,所以我想用這樣的結構:在Zend路由正則表達式問題

  • domain.com/event/2010/ =>同期活動2010
  • domain.com/event/2010/11/ =>活動2010年11月
  • domain.com/event/2010/11/23/ =十一月>事件,23日2010

對於這個pourpuse我創建了以下路線:

$router->addRoute('event', new Zend_Controller_Router_Route_Regex('event/(\d+)(/(\d+)(/(\d+))?)?', array(
        'module' => 'public', 
        'controller' => 'event', 
        'action' => 'show' 
       ))); 

$router->addRoute('eventLang', new Zend_Controller_Router_Route_Regex(':language/event/(\d+)(/(\d+)(/(\d+))?)?', array(
        'language'=>'en' 
        'module' => 'public', 
        'controller' => 'event', 
        'action' => 'show' 
       ))); 

第一個作品完美。第二個顯示錯誤,如「行動2010不存在」。這裏有什麼問題???

回答

1

你不能在Zend_Controller_Router_Route_Regex中使用變量(在你的情況下爲:language)。你應該改寫你的正則表達式:

$router->addRoute('eventLang', new Zend_Controller_Router_Route_Regex('[^/]+/event/(\d+)(/(\d+)(/(\d+))?)?', array(
    'module' => 'public', 
    'controller' => 'event', 
    'action' => 'show' 
), array(
    1 => 'language' 
)); 
+0

非常感謝你的回答。我想知道如果一個字符串在正則表達式中有3個以上的字符,我可以穩定。例如:[a-z] {3+} –

+0

當然你可以寫([a-z] {3+}) – Zyava