0

我想转换格式为的 URL

path/to/my/app/Controller_action/id/2

path/to/my/app/Controller_action/id/User_corresponding_to_id_2

我已经从 Yii 看过这个教程,但它对我没有任何帮助。谁能帮我这个?

编辑:我还想知道这件事在 POST 场景中是否可能,即我只会在 URL 中有 path/to/my/app/Controller_action 。

4

2 回答 2

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虚拟属性

于 2012-05-15T06:35:51.387 回答
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>',

在视图中生成用户 url:

 $this->createUrl('user/view', array('id' => $oUser->username));
于 2012-05-15T07:02:03.413 回答