Zend_Controller_Router_Route

Я пытаюсь сделать Router, который может ответить на эту структуру:

module/controller/action/id и module/controller/action/page

Единственное отличие – это «id» или «page». Я использую этот код:

 $routeAdmin = new Zend_Controller_Router_Route( 'administrador/:controller/:action/:id/:pg', array( 'module' => 'administrador', 'controller' => 'index', 'action' => 'index', 'id' => 0, 'pg' => 1 ), array( 'id' => '\d+', 'pg' => '\d+' ) ); $router->addRoute('administrador', $routeAdmin); 

Проблема в том, что в некоторых ситуациях я хочу:

'http://www.domain.cl/administrador/productos/2' => (module=>administrador, controller=>productos,page=>2) но с маршрутизатором 'administrador' результат в 'http://www.domain.cl/administrador/productos/index/0/2' (module=>administrador, controller=>productos,action=>index,id=>0,page=>2)

Я очень смущен тем, как это работает для подобных случаев. Я попытался сделать два маршрутизатора, где первый только имеет параметр «id» и другой параметр «page». И от помощника URL-адреса используйте его как:

  1. $this->url(array('module' => 'administrador', 'controller' => 'productos', 'action' => 'index', 'id' => 0), 'administradorId');

  2. $this->url(array('module' => 'administrador', 'controller' => 'productos', 'action' => 'index', 'page' => 1), 'administradorPg');

Но когда я использовал маршрутизаторы, всегда выбираю последний, добавленный к маршрутизатору ( $router->addRoute('routerIdentifier', $route); )

благодаря

У меня была аналогичная проблема, и я обошел это, определив только один маршрут, подобный этому

 $routeAdmin = new Zend_Controller_Router_Route( 'administrador/:controller/:action/:id/:pg', array( 'module' => 'administrador', 'controller' => 'index', 'action' => 'index', 'id' => 0 ), array( 'id' => '\d+' ) ); $router->addRoute('administrador', $routeAdmin); 

В ваших actions вам нужно будет получить id и проверить его где-нибудь, где этот id может быть, например, если вы были в /administrador/events/view/1 тогда вы можете посмотреть в таблице событий или если вы были в /administrador/pages/view/1 тогда вы будете искать страницу.

Но проблемы действительно начинаются, когда id может быть либо событием, либо страницей в данном контроллере и действии. Единственный реальный путь вокруг этого – явно указать тип id вашего использования, например

 /administrador/events/view/index/id/1 

или

 /administrador/pages/view/index/page/1 

Если вы хотите удалить часть индекса, настройте маршруты, например

 $routeAdmin = new Zend_Controller_Router_Route( // Remove the action from here and explicitly set the controller 'administrador/pages/:pg', array( 'module' => 'administrador', 'controller' => 'pages', // Then set the default action here 'action' => 'index', 'pg' => 0 ), array( 'pg' => '\d+' ) ); $router->addRoute('administradorpages', $routeAdmin); 

То, что вы просите, в основном приводит к большой догадки и, следовательно, к риску получения неожиданных результатов.

Посмотрите на динамические сегменты в маршрутах. Это не совсем то, что вы хотите, но это может быть полезно в вашем случае.