【问题标题】:Yii urlManager unlimited parametersYii urlManager 无限参数
【发布时间】:2013-02-13 04:39:15
【问题描述】:

yii 有没有办法让参数不受限制

例如,我有模块 /admin/

'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

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

以及如何在控制器动作中捕捉到它?

【问题讨论】:

    标签: php yii


    【解决方案1】:

    有个捷径:

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

    即用/*附加规则

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

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

    【讨论】:

    • hmm,当你在模块中使用它时会发生什么?编辑:如果你使用 createUrl,你会得到什么样的 url?或其他告诉您它不起作用的东西?
    • 当我尝试 admin/anycontroller/anyaction/12/anything 时是 404
    • 但是当我使用这个规则时没关系:'admin/anycontroller/anyaction//'=>'admin/anycontroller/anyaction' and 'admin /anycontroller/anyaction///'=>'admin/anycontroller/anyaction' 等等
    • 同样的 404,啊,我的错.. 这是因为控制器中的动作没有自动捕获它 function action actionAnyAction($id=0,$type='',$type2='')
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多