“Beautifying” a URL in Yii

纵饮孤独 提交于 2019-12-11 17:27:34

问题


I want to convert a URL which is of the format

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

to

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

I have already seen this tutorial from Yii, but it isnt helping me with anything. Can anyone help me with this?

EDIT: I would also like to know if this thing is even possible in the POST scenario, ie I will only have path/to/my/app/Controller_action in the URL.


回答1:


Add a getUrl method in your User model

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

Add the following rule urlManager component in config/main.php

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

And use the models url virtual attribute everywhere




回答2:


dInGd0nG is on the correct track, but if I understand correctly you wish to do actions based on the actual username instead of the ID as well right?

It's not that hard in Yii. I'm assuming here for simplicity the controller is user and the action is view.

Your User controller:

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));

    ...
}

Your urlManager config:

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

Or more generally:

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

To generate a user url in a view:

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


来源:https://stackoverflow.com/questions/10593722/beautifying-a-url-in-yii

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!