Yii框架urlManager重写规则

时间:2012-06-27 10:19:04

标签: yii

我有一个看起来像这样的网址:

<controller>/<action>/param/value

我希望它喜欢这样的东西:

param/value

如何实现?

我尝试了这条规则,但不确定它是否正常(控制器是帐户,操作是索引)。

'user/<user:.*>' => 'account/index/user/test'

2 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,你想要像这样处理URL:

mysite.domain/user/username123

使用param 用户 AccountController 中调用 actionIndex ,其中(在这种情况下)等于“username123”

在这种情况下,您可以尝试以下规则:

'user/<user:.*>' => 'account/index/<user>'

但是如果您的行动可能需要更改声明:

function actionIndex($user){
    // code
}

答案 1 :(得分:1)

我会避免将params放入动作签名中,因为yii不会处理具有不匹配签名的操作[优雅地] ...实际上,将$ user放入将绑定该动作始终需要指定$ user且如果你决定改变你的功能,追踪为什么你的行动没有被调用将比确定你的$ _GET未设置的原因更难...我建议不要将$ user添加到签名中,只是在你的行动中做一些如下的事情。

//will always run on /user/<USER:.*>
function actionIndex(){
    $user = isset($_GET['user'])?$_GET['user']:NULL;
    if(!is_null($user)){
        //your user specific account action..
    }else{
        //handle your error gracefully..
    }
}

这种方法可以让您的行动更加灵活。 URL规则应如下所示:

'user/<user:.*>' => 'account/index/user/<user>' //user is defined as a get...

希望有助于&amp;&amp;快乐的编码!