0

次の形式でURLを処理するためのZend_Controller_Router_Route_Regexルートを作成しようとしています。

search?q=chicken/page=2ここで、最初の正規表現サブパターンはでchicken、2番目のサブパターンは2です。の2番目の部分page=2は、最初のページ、つまり。の場合はオプションにしますpage=1。したがって、などの別のURLsearch?q=chickenも有効であり、と同等ですsearch?q=chicken/page=1

これは成功しなかったものの、私の試みですが、私がやろうとしていることのより良い全体像をあなたに与えるためです。


        $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);

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

前もって感謝します。

編集#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に、search?q=[text]リクエストが表示されます。正規表現の一致ルートを強制的に通過させるにはどうすればよいですか?

これが私がやりたいことですが、コードは機能しません

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

2 に答える 2

0

/search?q=chicken/page=2ZendFrameworksのルーターでは解析できません。ルーターはのみを表示します/search

ルーターは、サーバーから提供されたパス情報と、?クエリ文字列です。

次のようなパスを使用する必要があります。

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

その場合、正規表現ははるかに単純になります。

于 2010-12-08T13:21:59.540 に答える
0

後にを追加して、2番目の部分をオプション?にします。

search\?q=([a-zA-Z0-9]+)(?:/page=(\d+))?
于 2010-12-08T13:22:24.580 に答える