Zend-基于参数编号的路由规则


Zend - routing rules based on parameters number

在我的项目中,我使用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。但这应该会让你对如何解决这个问题有一个大致的想法。