2011-05-08 10 views
0

私は正規表現をよく使っていません。私は簡単なサイトを構築するためにそれらを使用しようとしています。 /some-course/some-vtm-1のようなURLを作成しますが、定義されたコントローラをルックアップしようとすると失敗します。ここで私は定義されているルートです: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/' 
      ), 

それは私が/some-course/some-vtm-1のようなリンクがクリックされた正しいモジュール/コントローラ/アクションを見つけたので、私は、この正規表現を修正する必要がありますどのように

+0

なぜマイナス/ダッシュの前にバックスラッシュがありますか?私はあなたが ' - '文字をエスケープする必要はないと思います。 – Marcin

答えて

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] +) ''後ろのハイフンと整数の前の最初の2つのパスにハイフンがあるので、それも考慮する必要があります。 – Nathan

+0

ここに私の実用的な解決策があります、それを行う "正しい"方法だと思います。 ([\ d] +) '、' – Nathan

+0

あなたはそれが働いてうれしい! –