Я пытаюсь сделать 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-адреса используйте его как:
$this->url(array('module' => 'administrador', 'controller' => 'productos', 'action' => 'index', 'id' => 0), 'administradorId');
$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);
То, что вы просите, в основном приводит к большой догадки и, следовательно, к риску получения неожиданных результатов.
Посмотрите на динамические сегменты в маршрутах. Это не совсем то, что вы хотите, но это может быть полезно в вашем случае.