2011-05-08 34 views
0

我從來沒有在正則表達式擅長。我正在嘗試使用它們來構建一個簡單的站點。我構建了一個類似於/some-course/some-vtm-1的URL,但是當它試圖查找定義的控制器時,它會失敗。以下是我定義的航線:我應該如何糾正這種正則表達式,從而找到正確的模塊/控制器/我喜歡/some-course/some-vtm-1點擊一個鏈接時,動作ZendFramework:簡單的Router_Regex問題

chapter' => array(
       'type' => 'Zend_Controller_Router_Route_Regex', 
       'route' => '/:course/:vtm\-(\d+)', 
       'defaults' => array(
        'module'  => 'learn', 
        'controller' => 'chapter', 
        'action'  => 'index' 
       ), 
       'map' => array(
        1 => 'course', 
        2 => 'vtm', 
        3 => 'id' 
       ), 
       'reverse' => '%s/%s-%d/' 
      ), 

+0

爲什麼在減號/破折號前有反斜槓?我認爲你不需要逃避''''字符。 – Marcin 2011-05-09 05:27:32

回答

3

您的問題是你試圖混合Zend_Controller_Router_Route(在從:開始的路由中命名變量)和Zend_Controller_Router_Route_Regex(在路線中括起來的正則表達式模式)的語法。你想放棄前者,只是使用正則表達式語法,留下類似這樣的東西:

array(
    'type' => 'Zend_Controller_Router_Route_Regex', 
    'route' => '([\w]+)/(vtm)-([\d]+)', 
    'defaults' => array(
     'module'  => 'learn', 
     'controller' => 'chapter', 
     'action'  => 'index' 
    ), 
    'map' => array(
     1 => 'course', 
     2 => 'vtm', 
     3 => 'id' 
    ), 
    'reverse' => '%s/%s-%d' 
), 
+0

我剛剛嘗試了您的解決方案,但仍然不匹配此路線。我注意到你有(vtm)在那裏作爲一個字符串。我嘗試了你的方式,並且''route'=>'([\ w] +)/([\ w] +) - ([\ d] +)''這兩個都不起作用。在連字符和整數之前的前兩個路徑中有連字符,所以我需要考慮這一點。 – Nathan 2011-05-09 15:05:50

+0

這是我的工作解決方案,我希望這是做「正確」的方法。 ''route'=>'([\ w - ] +)/([\ w - ] +) - ([\ d] +)',' – Nathan 2011-05-09 15:15:10

+0

是的,看起來不錯, – 2011-05-09 15:38:09