我正在尝试创建一个"覆盖"这种URL的路由:
www.test.com/parent1/parent2/parent3/item
www.test.com/parent1/parent2/parent3/parent4/item1
未指定的那些父母的数量,它应该只用于为网站URL提供更好,更直观的外观.主要参数是"item".
我想解决这个问题的唯一方法就是使用Route_Regex,所以我尝试用这样的方法完成这个路由任务:
routes.test.type = "Zend_Controller_Router_Route_Regex" routes.test.route = "test/(?:.*)?([^\/]+)" routes.test.defaults.module = default routes.test.defaults.controller = test routes.test.defaults.action = index routes.test.map.1 = "path" routes.test.map.2 = "item" routes.test.reverse = "test/%s%s"
我没有对此进行过多次测试,因为我不确定我是否做了正确的事情......我不知道这个正则表达式应该是什么样的,我应该怎样对待这条"路径".
你能告诉我应该怎样做才能满足这种路线需求吗?所以,我只需要那个路径(parent1,parent2等),而主要的参数就是"item"......
我知道这是一个老问题,但我遇到了类似的问题,我想我应该发布我的解决方案.也许它可以帮助其他人查看这个问题.
我在插件中编写了我的路由,显然你需要将插件添加到bootstrap中才能使用;)
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); } }
我不得不使用两条路线,因为我们试图查看/打开的当前页面可能没有任何父母.我确信可能有更好的方法来编写正则表达式,但这对我有用.如果有人知道如何改进正则表达式,请告诉我.