次の形式で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 ));
}