2012-02-21 44 views
0

我的项目我正在使用zend来处理路由。 Atm我们的路由规则如下所示: array( 'match'=>'page', 'params'=> array('page','idConfiguration'), 'controller'=>'controler1 ', 'action'=>'action1' )Zend - 基于参数的路由规则编号

因此,我们通过以下方式访问此操作:http://base_url/page/1/1223324例如。

是否有一个简单的解决方案来创建规则,以便我可以根据参数数量来确定哪个操作被调用?

我想它看起来方式如下: http://base_url/ - 行动0 http://base_url/pageNumber - 行动1 http://base_url/pageNumber/idConfiguration - 行动2 http://base_url/pageNumber/idConfiguration/someotherparam - 行动3

预先感谢您的帮助

回答

1

基于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" 
1

你可以继承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。但是这应该给你一个关于如何解决这个问题的总体思路。