微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Yii urlManager无限参数

在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>',          
    ),
  ),

在管理模块中,我需要每个动作都有无限的参数,例如:

 /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

我应该在规则上逐一定义吗?或者有捷径可以做到这一点?

以及如何在控制器动作上捕获它?

解决方法:

一个捷径:

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

即用/ *附加规则

由于这是一个更普遍的规则,它可以捕获很多网址,最好将它放在底部,或者至少在任何特定规则之后,即:

// ... 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 =”)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐