2012-05-13 10 views
0

URLを整理するための正規表現ルートを定義しています。ユーザが追加したすべてのページは、実際のコントローラwww.example.com/userpages/page-slugを使用するのではなく、www.example.com/page-slugというURLを使用します。他のページは、コントローラ:アクションルーティングスキームの標準モジュールに従います。正規表現ルーティング - ルールが見つかりません

私はルータの優先順位を使用してこれを実現しようとしています。私は、以下のスキームを定義している

..

class Default_Bootstrap extends Zend_Application_Module_Bootstrap{ 

protected function _initRoute() { 

    $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); // returns a rewrite router by default 

    $route['index'] = new Zend_Controller_Router_Route_Regex(
     '/', 
     array(
     'module'  => 'default', 
     'controller' => 'index', 
     'action'  => 'index' 
     ) 
    ); 
    $route['contact'] = new Zend_Controller_Router_Route_Regex(
     'contact/(\d+)', 
     array(
     'module'  => 'default', 
     'controller' => 'contact', 
     'action'  => 'index' 
     ) 
    ); 
    $route['research'] = new Zend_Controller_Router_Route_Regex(
     'research/(\d+)', 
     array(
     'module'  => 'default', 
     'controller' => 'research', 
     'action'  => 'index' 
     ) 
    ); 
    $route['account'] = new Zend_Controller_Router_Route_Regex(
     'account/(\d+)', 
     array(
     'module'  => 'default', 
     'controller' => 'account', 
     'action'  => 'index' 
     ) 
    ); 
    $route['userpages'] = new Zend_Controller_Router_Route_Regex(
     '/(.+)', 
     array(
     'module'  => 'default', 
     'controller' => 'userpages', 
     'action'  => 'index' 
     ), 
     array(
     'slug' => 1 
     ), 
     '%s' 
    ); 

    $router->addRoute('userpages',  $route['userpages']); 
    $router->addRoute('contact',  $route['contact']); 
    $router->addRoute('research',  $route['research']); 
    $router->addRoute('account',  $route['account']); 
    $router->addRoute('index',   $route['index']); 

} 

} 

物事は、一般的にルータの優先順位は、インデックス/アカウント/研究/連絡先のページが正しいコントローラを拾っていることを確実にすることでOK取り組んでいます。ただし、「ユーザーページ」のルートに含まれるURLにアクセスしようとすると、 "about-us"、最終的なキャッチすべてのルートが見つかりませんでした...

Message: Invalid controller specified (about-us) 
. 
. 
. 
Request Parameters: 

array (
    'controller' => 'about-us', 
    'action' => 'index', 
    'module' => 'default', 
) 

私はここで間違っていますか?正規表現は正しい "/(.+)"が索引ページではないものをキャッチしているはずです。

EDIT:@phatfingers、OKです。私は "\ d +"を "。+"に編集して、1つ以上の文字をキャッチします。問題は解決しません。実際には、正規表現を変更する前に、私はURL www.example.com/52を試して、同じエラーが発生しました - "無効なコントローラが指定されました(52)"。変更後、上記のスニペットごとのコードでは、ルールはまだ一致するものを見つけることができません。

+0

正規表現 "(\ d +)"は数字のみと一致します。 URL例 "www.example.com/page-slug"は数字で終わらない。 – phatfingers

+0

@phatfingersの観測のおかげで、上記の私の編集を参照してください - ルールはまだ期待どおりに一致していません – NaNuk

+0

私は 'userpages'正規表現にスラッシュを入れなければならないと思う、つまり '( '。+)' –

答えて

0

ドロップ「userpages」正規表現にスラッシュ、すなわちだけ(」。+)

は引用直手動Zend RouterとRouter_Regexからのものであるが、それはまた、すべてのルートに適用され私の知る限り。

注:マッチする前に、 ルータのURLから先頭と末尾のスラッシュが削除されます。その結果、URL http://domain.com/foo/bar/と一致する場合は、foo/barの正規表現が使用され、 /foo/barは含まれません。

関連する問題