Я пытаюсь создать маршрут 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
, я получаю запрос на поиск? q = [текст].Как заставить его пройти через маршрут сопоставления с регулярным выражением?
Вот что я хочу сделать, однако код не работает
if($this->getRequest()->getParam('query')){
// redirect success
} else {
$url = "search?q=" . $this->_getParam('q');
$this->_redirect(route('search'), array('code' => 301 ));
}