Я знаю, что это старый вопрос, но у меня была похожая проблема, и я решил опубликовать свое решение. Может быть, это может помочь другим, просматривающим этот вопрос.
Я написал свои маршруты в плагине. Очевидно, вам нужно добавить плагин в загрузчик, чтобы это работало;)
class Plugin_RoutesPage extends Zend_Controller_Plugin_Abstract
{
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
$front_controller = Zend_Controller_Front::getInstance();
$router = $front_controller->getRouter();
// Page SEO friendly hierarchical urls
$routePageSeoTree = new Zend_Controller_Router_Route_Regex(
'([-a-zA-Z0-9/]+)/([-a-zA-Z0-9]+)',
array(
// default Route Values
'controller' => 'page',
'action' => 'open',
),
array(
// regex matched set names
1 => 'parents',
2 => 'item'
)
);
$router->addRoute('page-seo-tree',$routePageSeoTree);
// only one level
$routeSinglePage = new Zend_Controller_Router_Route_Regex(
'([-a-zA-Z0-9]+)',
array(
// default Route Values
'controller' => 'page',
'action' => 'open',
),
array(
// regex matched set names
1 => 'item'
)
);
$router->addRoute('page-single',$routeSinglePage);
}
}
Вот как вы можете использовать его в действии вашего контроллера
class PageController extends Zend_Controller_Action
{
public function openAction()
{
// the part of the uri that you are interested in
$item = $this->_request->getParam('item');
}
}
Вот краткий пример того, как включить его в ваш загрузчик
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initPlugins()
{
$front_controller = Zend_Controller_Front::getInstance();
$front_controller->registerPlugin(new Plugin_RoutesPage(), 1);
}
}
Мне пришлось использовать два маршрута, потому что текущая страница, которую мы пытаемся просмотреть / открыть, может не иметь родителей. Я уверен, что, возможно, есть лучший способ написать регулярное выражение, но это то, что сработало для меня. Если кто-нибудь знает, как улучшить регулярное выражение, пожалуйста, дайте мне знать.