具有任意路径的zend路由器

时间:2011-10-31 04:07:11

标签: php zend-framework url redirect

所以我正在设置路由器

  protected function _initRoutes(){
      $front = Zend_Controller_Front::getInstance();
      $router = $front->getRouter();
      $routerInfo =  array('action' => 'theaction',
                           'controller' => 'thecontroller',);
       $route = new Zend_Controller_Router_Route(
                         'some/path',
                         $routerInfo
       );
       $router->addRoute('some/path', $route);

      return $router;
  }

所以控制器'some'和action'path'并不存在。相反,当用户进入/ some / path时,它应该重定向到'theaction / thecontroller'而不是....

我的问题是......如何设置它以便我可以在/some/path...for实例后接受一些参数,我希望/ some / path / other / param也可以重定向到相同的页面......所以只要路径的第一段是/ some / path,不管后面是什么,我都希望它们全部重定向到同一个控制器和动作

我知道你可以做/some/path/*/* ....但只有在/some/path....之后只有2个其他路径项时才能工作。我想让它适用于任意数字参数....所以/ some / path / param1 / value1 / param2 / value2 / param3 / value3也应该仍然有用,就像用户输入了控制器/ theaction / param1 / value1 / param2 / value2 / param3一样/ valu3 ...

1 个答案:

答案 0 :(得分:1)

您只需使用一个星号,例如

$route = new Zend_Controller_Router_Route(
    'some/path/*',
    array(
        'action'     => 'theaction',
        'controller' => 'thecontroller',
        'module'     => 'default'
    )
);

// can't say for sure but a slash in the route name is probably a bad idea
// try a hyphen instead
$router->addRoute('some-path', $route);

请参阅此处的第3个示例 - http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.standard

仅供参考,不要在Bootstrap方法中获得FrontController资源。请改用它......

$this->bootstrap('FrontController');
$front = $this->getResource('FrontController');