Url rewriting &引用;美化;Yii中的URL

Url rewriting &引用;美化;Yii中的URL,url-rewriting,yii,Url Rewriting,Yii,我想转换一个URL的格式 路径/to/my/app/Controller\u action/id/2 到 路径/to/my/app/Controller\u action/id/User\u对应于\u id\u 2 我已经看过Yii的教程,但它对我没有任何帮助。有人能帮我吗 编辑:我还想知道这件事在POST场景中是否可行,即URL中只有path/to/my/app/Controller\u操作。在您的用户模型中添加一个getUrl方法 public function getUrl() {

我想转换一个URL的格式

路径/to/my/app/Controller\u action/id/2

路径/to/my/app/Controller\u action/id/User\u对应于\u id\u 2

我已经看过Yii的教程,但它对我没有任何帮助。有人能帮我吗


编辑:我还想知道这件事在POST场景中是否可行,即URL中只有path/to/my/app/Controller\u操作。

在您的用户模型中添加一个getUrl方法

public function getUrl()
{
    return Yii::app()->createUrl('controller/action', array(
    'id'=>$this->id,
    'username'=>$this->username,
    ));
}
config/main.php

'controller/action/<username:.*?>/<id: \d+>'=>'controller/action'
'controller/action/'=>'controller/action'

并在任何地方使用models
url
virtual属性

dInGd0nG在正确的轨道上,但如果我理解正确,您希望根据实际用户名而不是ID执行操作,对吗

依依语没那么难。为了简单起见,这里假设控制器是用户,操作是视图

您的用户控制器:

public function actionView($id)
{
    if (is_numeric($id))
       $oUser = User::model()->findByPk($id);
    else
       // Luckily Yii does parameter binding, wouldn't be such a good idea otherwise :)
       $oUser = User::model()->findByAttributes(array('username' => $id));

    ...
}
您的urlManager配置:

'user/view/<id: \w+>' => 'user/view',

是否有理由需要使用Yii进行重写?使用.htaccess重写规则会简单得多。问题是,这一切都是动态的。如果我必须将path/user=“someName”转换为path/someName,我会很乐意将其写入.htaccess文件中。关于编辑:真的不要这样做。只有当数据库中的数据即将更改时,才接受使用POST。它还会一直向访问者显示一个“你确定你想再次发布表单吗?”弹出窗口。嘿,这个功能很有效,但我需要更多的澄清。一件事是,现在我需要添加用户名作为我的动作函数的参数!!还有,你能告诉我,当我发布一个页面却没有得到它的时候,我怎么能创建一个类似的东西呢。请澄清,如果可能的话,用一个例子解释我的意思是表单操作-获取和发布。我认为这种URL重写只适用于GET(即在URL中传递参数)。我错了吗?
'user/<action: \w+>/<id: \w+> => 'user/<action>',
 $this->createUrl('user/view', array('id' => $oUser->username));