Я определяю маршруты регулярных выражений для очистки моих URL. Идея состоит в том, что все страницы, добавленные пользователем, будут использовать URL www.example.com/page-slug, а не использовать фактический контроллер, www.example.com/userpages/page-slug. Другие страницы будут следовать стандартным модулю: controller: схема маршрутизации действий.Regex Routing - правило не найдено
Я пытаюсь сделать это с использованием приоритета маршрутизатора.
Я определил схему ниже ..
class Default_Bootstrap extends Zend_Application_Module_Bootstrap{
protected function _initRoute() {
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter(); // returns a rewrite router by default
$route['index'] = new Zend_Controller_Router_Route_Regex(
'/',
array(
'module' => 'default',
'controller' => 'index',
'action' => 'index'
)
);
$route['contact'] = new Zend_Controller_Router_Route_Regex(
'contact/(\d+)',
array(
'module' => 'default',
'controller' => 'contact',
'action' => 'index'
)
);
$route['research'] = new Zend_Controller_Router_Route_Regex(
'research/(\d+)',
array(
'module' => 'default',
'controller' => 'research',
'action' => 'index'
)
);
$route['account'] = new Zend_Controller_Router_Route_Regex(
'account/(\d+)',
array(
'module' => 'default',
'controller' => 'account',
'action' => 'index'
)
);
$route['userpages'] = new Zend_Controller_Router_Route_Regex(
'/(.+)',
array(
'module' => 'default',
'controller' => 'userpages',
'action' => 'index'
),
array(
'slug' => 1
),
'%s'
);
$router->addRoute('userpages', $route['userpages']);
$router->addRoute('contact', $route['contact']);
$router->addRoute('research', $route['research']);
$router->addRoute('account', $route['account']);
$router->addRoute('index', $route['index']);
}
}
вещи, как правило, работают нормально с маршрутизатором старшинства гарантируя, что индекс/счета/исследования/контактные страницы подбирая правильный контроллер. Однако при попытке перейти к URL-адресу, охватываемому маршрутом «пользовательские страницы», например. «О нас», окончательный поймать всех маршрут не был найден в результате ...
Message: Invalid controller specified (about-us)
.
.
.
Request Parameters:
array (
'controller' => 'about-us',
'action' => 'index',
'module' => 'default',
)
Любая идея, где я собираюсь здесь не так? Мне кажется, что регулярное выражение является правильным: «/(.+)« следует ловить все, что не является индексной страницей.
EDIT: @phatfingers, ОК, вы правы, я редактировал «\ d +» на «. +», Чтобы поймать один или несколько символов. Проблема сохраняется. Фактически перед изменением регулярного выражения я попробовал URL-адрес www.example.com/52 и получил ту же ошибку - «Неверный контроллер указан (52)». После изменения - с кодом в соответствии с отредактированным фрагментом выше, правило все еще не находит совпадений.
Регулярное выражение "(\ d +)" соответствует только цифрам. Пример URL-адреса «www.example.com/page-slug» не заканчивается цифрами. – phatfingers
спасибо за наблюдение @phatfingers, см. Мое редактирование выше - правило все еще не соответствует ожидаемому – NaNuk
Я думаю, что вам нужно отбросить косую черту в регулярном выражении 'userpages', то есть просто '('. +)' –