2010-12-08 8 views
0

を助けます。 2番目の部分はpage=2ですが、最初のページであれば任意にしたい、それはpage=1です。したがって、search?q=chickenなどの別のURLも有効で、search?q=chicken/page=1と同等です。Zendの正規表現のルートは、私は次の形式でURLを処理するZend_Controller_Router_Route_Regexルートを作成しようとしています

ここでは私の試みは成功していませんが、私がしようとしていることのより良いイメージを提供します。


     $route = new Zend_Controller_Router_Route_Regex(    
      'search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))', 
      array( 
       'page'=> '1', 
      'module' => 'default', 
      'controller' => 'search', 
      'action' => 'index'), 
      array(1 => 'query', 2 => 'page'), 
      'search?=%s/page=%d'); 
     $router->addRoute('search', $route); 

ここでの問題は正しい正規表現を構成できないことです。

ありがとうございます。

EDIT#1

正しい正規表現MA4で指摘したように、本当の問題はダリルによって指される'search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))?'

です。物事を見通しに入れるための情報が少しあります。

マイ検索テキストボックスとボタン

<form action="/search" method="get"> 
      <input type="text" name="q" /> 
      <input type="submit" value="Search" /> 
    </form> 

私はsearchボタンを押すたびに、私は検索?Q = [テキスト]要求を取得します。どのようにして正規表現のマッチルートを通過させるのですか?ここで

は私が何をしたいのか、しかし、コードは動作しません

if($this->getRequest()->getParam('query')){ 
     // redirect success 
    } else { 
     $url = "search?q=" . $this->_getParam('q');    
     $this->_redirect(route('search'), array('code' => 301)); 
    } 

答えて

0

/search?q=chicken/page=2は、Zendのフレームワークルータによって解析可能ではないです。ルータには/searchしか表示されません。

ルータは、サーバによって提供されるパス情報と、?クエリ文字列です。あなたはこのようなパスを使用する必要があります

:あなたの正規表現はずっと簡単になる

/search/[word]  (default page 1) 
/search/[word]/[page] 

た場合。

+0

おかげで、私の検索ボタンが動作しない理由を、今、私は知っているが。私は詳細については私の元の質問を編集しました。 – nobody

+0

私の答えはまだ答えです。 '/ search?q = chicken/page = 2'というリクエスト文字列ではできないことはpathinfoが'/search'になり、 'q'の単一の$ _GET paramが' chicken/page = 2' - Zend Frameworkルータはpathinfoのみを使用します。 –

0

は後?を追加することにより、第2の部分optionnalを作る:入力用

search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))? 
+0

入力していただきありがとうございます。余分な '?'は正規表現を修正しますが、私のルーティングはまだDarrylによって指摘された理由のために動作しません。 – nobody

関連する問題