Я пытаюсь создать маршрут Zend_Controller_Router_Route_Regex для обработки URL-адреса в следующем виде:Zend Regex Маршрут помочь
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);
Проблема в том, что я не могу составить правильное регулярное выражение.
Заранее спасибо.
EDIT # 1
Правильное регулярное выражение, как указывал МА4, является '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
, я получаю д = [текст] запрос поиска?. Как заставить ее пройти маршрут соответствия регулярному выражению?
Вот что я хочу сделать, однако код не работает
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` и единственным параметром $ _GET для `q`, имеющим значение` chicken/page = 2` - маршрутизатор Zend Framework использует ТОЛЬКО pathinfo. – 2010-12-08 19:10:33