我正在尝试创建一个可以响应此结构的路由器:
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 helper中使用它:
$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);
)
由于
答案 0 :(得分:2)
我遇到了类似的问题,我通过定义这样一条路线来解决这个问题
$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);
你的要求基本上会导致很多猜测工作,从而产生意外结果的风险。
答案 1 :(得分:1)
查看路线中的dynamic segments。这不完全是你想要的,但在你的情况下可能会有所帮助。