在我的项目中,我使用zend来处理路由。目前,我们有如下路由规则:阵列('match'=>'page','params'=>数组('page','idConfiguration'),'controller'=>'controller1','action'=>'action1')
因此,我们通过以下方式访问此操作:http://base_url/page/1/1223324例如
有没有一个简单的解决方案来创建规则,这样我就可以根据参数的数量来确定调用哪个操作?
我希望它看起来如下:http://base_url/-操作0http://base_url/pageNumber-动作1http://base_url/pageNumber/idConfiguration-动作2http://base_url/pageNumber/idConfiguration/someotherparam-动作3
提前感谢您的帮助
基于Ini的解决方案(希望我能理解您的需求):
routes.action0.route = "/:pageNumber"
routes.action0.defaults.controller = "controller0"
routes.action0.defaults.action = "action0"
routes.action0.reqs.pageNumber = "'d+"
routes.action1.route = "/:pageNumber/:idConfiguration"
routes.action1.defaults.controller = "controller1"
routes.action1.defaults.action = "action1"
routes.action1.reqs.pageNumber = "'d+"
routes.action1.reqs.idConfiguration= "'d+"
routes.action2.route = "/:pageNumber/:idConfiguration/:someOtherParam"
routes.action2.defaults.controller = "controller2"
routes.action2.defaults.action = "action2"
routes.action2.reqs.pageNumber = "'d+"
routes.action2.reqs.idConfiguration= "'d+"
routes.action2.reqs.someOtherParam = "someOtherRegEx"
您可以将Zend_Controller_Router_Route子类化,并创建您喜欢的路由行为。在我的脑海中,不需要测试,你可以尝试这样的东西:
class MyRoute extends Zend_Controller_Router_Route
{
public function match($path)
{
$result = array(
'controller' => 'index',
'action' => substr_count($path, '/'),
);
return $result;
}
}
当然,您需要添加验证。此外,如果URL不匹配,并且希望使用其他路由对其进行测试,则应返回FALSE
。但这应该会让你对如何解决这个问题有一个大致的想法。