如何在URL上隐藏动作名称并用虚构的名称替换?

时间:2014-05-11 14:33:46

标签: yii

'urlManager'=>array(
   'urlFormat'=>'path',
   'rules'=>array(
     'gii'=>'gii',
     'gii/<controller:\w+>'=>'gii/<controller>',
     'gii/<controller:\w+>/<action:\w+>'=>'gii/<controller>/<action>',
     '<controller:\w+>/<action:\w+>/<param:\w+>'=>'<controller>/<action>',
     '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
     '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
     '<controller:\w+>'=>'<controller>/index',
    ),
    'showScriptName'=>false,

这些是我申请的规则。

如果我这样做:

http://something.dev/experience/listByColor/Red

我获得了红色的所有经验。

actionListByColor($color);

这很有效。

我希望用户能够这样做:

http://something.dev/experience/color/Red

我尝试过这些规则:

'experience/color/'=>'experience/listByColor/'

但我总是得到:

  

系统无法找到所请求的操作“颜色”。

我该如何做到这一点?

似乎urlFormat不适合这个,因为它似乎期望=>左侧的有效路径,在这种情况下,我们没有任何有效路径。

别无他法?

1 个答案:

答案 0 :(得分:1)

你忘记了params / id部分。使用以下适当的规则:

'experience/color/<param:\w+>'=>'experience/listByColor/'
'experience/color/<id:\d+>'=>'experience/listByColor/'
'experience/color/<color>'=>'experience/listByColor/'