我有一个看起来像这样的网址:
<controller>/<action>/param/value
我希望它喜欢这样的东西:
param/value
如何实现?
我尝试了这条规则,但不确定它是否正常(控制器是帐户,操作是索引)。
'user/<user:.*>' => 'account/index/user/test'
答案 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;快乐的编码!