2013-02-13 90 views
3

是存在警予的方式,使參數無限Yii的urlManager無限參數

例如,我已經模塊/管理/

'urlManager'=>array(
    'urlFormat'=>'path', 
    'showScriptName'=>false, 
    'caseSensitive'=>false, 
    'rules'=>array(
     '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
     '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
     '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',     
     'admin/<controller:\w+>/<action:\w+>/<id:\d+>' => 'admin/<controller>/<action>', 
     'admin/<controller:\w+>/<action:\w+>'=>'admin/<controller>/<action>',   
    ), 
), 

和管理模塊中我需要每一個動作可以有無限參數,例如:

/admin/anycontroller/anyaction/anything 
/admin/anycontroller/anyaction/anything/anything2 
/admin/anycontroller/anyaction/anything/anything2/anything3 
/admin/anycontroller/anyaction/anything/anything2/anything3/anything4 
... and so on 

我應該在規則上一個接一個地定義它嗎?還是有捷徑可以做到這一點?

以及如何捕捉控制器的動作?

回答

5

有一個捷徑:

'admin/<controller:\w+>/<action:\w+>/*'=>'admin/<controller>/<action>' 

即追加了/*

規則因爲這是一個更一般的規則,它可以抓到很多網址,倒不如將它在底部,或之後任何ATLEAST特定的規則,即:

// ... other specific rules ... 
'<controller:\w+>/<action:\w+>/<id:\w+>'=>'<controller>/<action>', // specifically for id 
// ... other specific rules ... 
'admin/<controller:\w+>/<action:\w+>/*'=>'admin/<controller>/<action>' 

對於您的情況:

'<controller:\w+>/<id:\d+>'=>'<controller>/view', 
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
'admin/<controller:\w+>/<action:\w+>/<id:\d+>' => 'admin/<controller>/<action>', 
'admin/<controller:\w+>/<action:\w+>'=>'admin/<controller>/<action>', 
'admin/<controller:\w+>/<action:\w+>/*'=>'admin/<controller>/<action>' 

要抓住它的動作,只是不爲動作指定任何參數,就像這樣:

public function actionSomething() { 
    // instead use $_GET 
    $params=$_GET; 

} 

但同時也應該與你已有的定義工作:public function actionAnyAction($id=0,$type='',$type2='')

+0

我不知道爲什麼它不在模塊內部工作.. – Kokizzu 2013-02-13 05:04:04

+0

嗯,當你在模塊中使用它會發生什麼?編輯:如果你使用createUrl,你會得到什麼樣的url?或別的東西告訴你它不工作? – 2013-02-13 05:06:34

+1

我已經更新了模塊的答案,請檢查 – 2013-02-13 05:17:24