在Yii中“美化”一个URL

时间:2012-05-15 03:18:35

标签: url-rewriting yii

我想转换格式为

的网址
  

路径/到/我的/应用/ Controller_action / ID / 2

  

路径/到/我的/应用/ Controller_action / ID / User_corresponding_to_id_2

我已经看过Yii的this教程,但它并没有帮助我。任何人都可以帮我这个吗?

编辑:我还想知道在POST场景中是否甚至可以使用这个东西,即我只会在URL中使用path / to / my / app / Controller_action。

2 个答案:

答案 0 :(得分:1)

在用户模型中添加getUrl方法

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

urlManager

中添加以下规则config/main.php组件
'controller/action/<username:.*?>/<id: \d+>'=>'controller/action'

并在所有地方使用模型url虚拟属性

答案 1 :(得分:1)

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

Yii并不难。为了简单起见,我假设控制器是用户,操作是查看。

您的用户控制器:

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',

或更一般地说:

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

在视图中生成用户网址:

 $this->createUrl('user/view', array('id' => $oUser->username));