3

我有一个如下所示的网址:

<controller>/<action>/param/value

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

param/value

如何实现?

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

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

2 回答 2

2

如果我正确理解了您的问题,您希望像这样处理 URL:

mysite.domain/user/username123

并使用参数User调用AccountController中的actionIndex,(在这种情况下)等于“username123”

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

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

但是,如果您的操作可能需要更改声明:

function actionIndex($user){
    // code
}
于 2012-06-27T13:53:53.547 回答
1

我会避免将参数放入动作签名中,因为 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...

希望能帮助&&快乐编码!

于 2012-07-02T14:39:04.647 回答