在yii中有一种方法可以使参数无限制
例如,我有模块/管理员/
'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>',
),
),
Run Code Online (Sandbox Code Playgroud)
在管理模块中,我需要每个动作都有无限的参数,例如:
/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
Run Code Online (Sandbox Code Playgroud)
我应该在规则上逐一定义吗?或者有捷径可以做到这一点?
以及如何在控制器动作上捕获它?
有一个捷径:
'admin/<controller:\w+>/<action:\w+>/*'=>'admin/<controller>/<action>'
Run Code Online (Sandbox Code Playgroud)
即附加规则 /*
由于这是一个更普遍的规则,它可以捕获很多网址,最好将它放在底部,或者至少在任何特定规则之后,即:
// ... 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>'
Run Code Online (Sandbox Code Playgroud)
对于你的情况:
'<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>'
Run Code Online (Sandbox Code Playgroud)
要在操作中捕获它,只需不要为操作指定任何参数,如下所示:
public function actionSomething() {
// instead use $_GET
$params=$_GET;
}
Run Code Online (Sandbox Code Playgroud)
但它也应该与您已有的定义一起使用: public function actionAnyAction($id=0,$type='',$type2='')
| 归档时间: |
|
| 查看次数: |
4013 次 |
| 最近记录: |