2013-02-13 43 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