使用Yii urlManager将参数传递给默认控制器/方法

时间:2014-01-22 07:33:32

标签: .htaccess yii

我想对urlManager使用一个catch-all规则,它会将我的基本url之后的任何内容传递给默认控制器和方法作为参数。

我的目标是将mysite.com/123等网址映射到mysite.com/controller/method/123,其中控制器/方法已预先确定,123作为命名参数传递。

这样的规则将最后放在urlManager链中,这样如果其他规则都不匹配,它会将基本网址之后的任何内容传递给我选择的控制器/方法。

任何想法??

修改 添加规则'<id>'=>'controller/method'(我认为我无论如何都尝试过)然后查看site.com/123将返回404未找到,但是来自 apache ,而不是Yii。我没有考虑的事情。

转到mysite.com/index.php/123得到了理想的结果。转到mysite.com/controller/method虽然会正确地路由网址。奇怪...

2 个答案:

答案 0 :(得分:0)

是的,您必须将此作为所有其他规则下的最后一条规则。

'<id>' => 'controllerName/methodName/<id>,'

示例:

'<id>' => 'user/view/<id>',

这将重定向所有网址,如下所示:

mysite.com/1

致:

mysite.com/user/view/1

如果您只想限制数字,请使用

'<id:\d+>' => 'controllerName/methodName/<id>,'

答案 1 :(得分:0)

您应该将此规则添加到网址规则的底部:

 'urlManager'=>array(
  'urlFormat'=>'path',
  'rules'=>array(
     '<controller:\w+>/<id:\d+>'=>'<controller>/view',
     '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
     '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
     '<pname:\w+>'=>'site/test',
  ),
),

Pname:您的命名参数。 站点/测试:目标行动。

在您的操作中,您应将“pname”定义为方法参数:

public function actionTest($pname) {
    echo "Name:$pname";
}