2012-01-28 13 views
0

PHP:Zendのルート正規表現と無効なコントローラ私はルートを追加する方法を持っている



    public function addRoutes() 
      { 
       $front = Zend_Controller_Front::getInstance(); 
       $redirect = $front->getRouter(); 
       $router = new Zend_Controller_Router_Route_Regex( 
                  "p\/(a-zA-Z0-9)\.htm", 
                 array(
                 'controller'=>'page', 
                 'action'=>'index', 
                  1=>'ja.htm' 
                 ), 
                 array(1 => 'page_name') 
         ); 
       $route2 = new Zend_Controller_Router_Route_Regex("(a-zA-Z0-9)\.html", 
         array('controller'=>'page', 
          'action'=>'index', 
          1=>'ja.html'), 
         array(1=>'page_name')); 
       $redirect->addRoute('pages',$router); 
       $redirect->addRoute('hmtmled',$route2); 
       $front->setRouter($redirect); 


      } 


私のようなURLを入力しようとした:P/ja.htmが、私はエラーを取得:無効なコントローラは、指定された(p)を。私はデフォルトルートの理由からそのことを知っていますが、それをどのように変更するのですか?

+0

:@Tim噴水が鋭くコメントで指摘するよう

また、正規表現をする必要があります'p /(a-zA-Z0-9)\ .htm'? –

+0

あなたのパターンは 'p /'の後に_single_ alphanum charだけを受け入れます。 'p /(a-zA-Z0-9)+ \。htm' –

+0

私のパターンがp /(a-zA-Z0-9)であっても、 )+ \ .htm p /(\ w + \ d +)\ .htmのようなオプションを指定しても同じエラーが発生する。htmはまだ失敗するので、regexpのエラーとは思わない。 – Axxxon

答えて

0

はあなたのBootstrapクラスのメソッドの一部ですか?もしそうなら、それが実行されていると確信していますか?自動で呼び出されるBootstrapメソッドは、_initXXX()という形式のものです(先頭のアンダースコアに注意してください)。もし正規表現パターンだけであるならば、私はあなたがそれが動作しない、スラッシュをエスケープする必要はないと思う

p/([0-9A-Za-z]+)\.htm 
0

デフォルトルートを削除しよう:

//excerpt from ZF reference 24.5.4. Default Routes... If you do not want this particular default route in your routing schema, you may override it by creating your own 'default' route (i.e., storing it under the name of 'default') or removing it altogether by using removeDefaultRoutes():

// Remove any default routes 
$router->removeDefaultRoutes(); 
関連する問題