我想創建一個Zend_Controller_Router_Route_Regex途徑來處理以下形式的網址:Zend的正則表達式路由幫助
search?q=chicken/page=2
其中第一個regex子模式將chicken
和第二個是2
。至於第二部分page=2
,如果它是第一頁,我想使它成爲可選項,即page=1
。因此,另一個網址,例如search?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
,我得到的搜索?Q = [文字]請求。我如何強制它通過正則表達式匹配路線?
這是我想做的事情,但是代碼不起作用
if($this->getRequest()->getParam('query')){
// redirect success
} else {
$url = "search?q=" . $this->_getParam('q');
$this->_redirect(route('search'), array('code' => 301));
}
感謝您的投入,現在我知道爲什麼我的搜索按鈕不起作用。我編輯了我原來的問題了解更多細節。 – nobody 2010-12-08 19:06:23
我的答案仍然是答案。你想做的事對於請求字符串是不可能的,`/ search?q = chicken/page = 2`將導致pathinfo爲`/ search`,而`q`的單個$ _GET參數的值爲`chicken/page = 2` - Zend Framework路由器僅使用pathinfo。 – 2010-12-08 19:10:33