Zend-маршрутизатор с произвольными путями - PullRequest
2 голосов
/ 31 октября 2011

поэтому я настраиваю роутер

  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... Например, я хочу, чтобы / some / path / other / param также перенаправлялся на одна и та же страница ... так что пока первый сегмент пути - это / some / path, независимо от того, что следует, я хочу, чтобы все они перенаправили на один и тот же контроллер и выполняли действие

Я знаю, что вы можете сделать /some/path/*/* .... но это сработает, только если после /some/path есть только 2 других элемента пути. Я хочу, чтобы это работало для произвольного числа параметров .... так / some / path / param1 / value1 / param2 / value2 / param3 / value3 также должны работать, и все будет так, как если бы пользователь набрал thecontroller / theaction / param1 / value1 / param2 / value2 / param3 / valu3 ...

1 Ответ

1 голос
/ 31 октября 2011

Вы просто используете одну звездочку, например,

$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);

См. Третий пример здесь - http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.standard

К вашему сведению, не получайте ресурс FrontController, подобный этому, в вашемМетоды начальной загрузки.Используйте это вместо ...

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