2012-02-21 66 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。但是這應該給你一個關於如何解決這個問題的總體思路。