我正在尝试创建一个 Zend_Controller_Router_Route_Regex 路由来处理以下形式的 URL:
search?q=chicken/page=2
第一个正则表达式子模式在哪里chicken
,第二个是2
. 至于第二部分 where 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 ));
}