【发布时间】:2010-12-08 10:58:01
【问题描述】:
我正在尝试创建 Zend_Controller_Router_Route_Regex 路由来处理以下形式的 URL:
search?q=chicken/page=2 其中第一个正则表达式子模式是chicken,第二个是2。至于page=2的第二部分,如果是第一页,我想将其设为可选,即page=1。所以另一个 url 如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 按钮时,我都会收到search?q=[text] 请求。如何强制它通过正则表达式匹配路由?
这是我想做的,但是代码不起作用
if($this->getRequest()->getParam('query')){
// redirect success
} else {
$url = "search?q=" . $this->_getParam('q');
$this->_redirect(route('search'), array('code' => 301 ));
}
【问题讨论】:
标签: regex zend-framework http-get zend-route