用户名而不是URL中的id - yii-user

时间:2014-02-18 06:10:53

标签: php yii yii-components

我正在使用“yii-user”(模块/用户),现在用户网址为mysite.com/user/user/view/id/1,我想要更改为mysite.com/profile/username

用户控制器是:

public function actionView()
    {
        $model = $this->loadModel();
        $this->render('view',array(
            'model'=>$model,
        ));
    }

public function loadModel()
    {
        if($this->_model===null)
        {

            if(isset($_GET['id']))
                $this->_model=User::model()->findbyPk($_GET['id']);

            if($this->_model===null)
                throw new CHttpException(404,'The requested page does not exist.');

        }
        return $this->_model;
    }


    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the primary key value. Defaults to null, meaning using the 'id' GET variable
     */
    public function loadUser($id=null)
    {
        if($this->_model===null)
        {
            if($id!==null || isset($_GET['id']))
                $this->_model=User::model()->findbyPk($id!==null ? $id : $_GET['id']);
            if($this->_model===null)
                throw new CHttpException(404,'The requested page does not exist.');
        }
        return $this->_model;
    }

我尝试添加此网址规则'profile/<username>' => 'user/user/view',,但它仍无效,因为模型需要在网址中显示ID。

请问好吗?

1 个答案:

答案 0 :(得分:0)

您只需修改操作以处理用户名,例如:

public function actionView($id=null, $username=null)
{
    if (isset($id))
        $model = User::model()->findByPk($id);
    else if isset($username))
        $model = User::model()->findByAttributes(array('username'=>$username));

    if ($model===null)
        throw new CHttpException(404,'The requested page does not exist.');

    $this->render('view',array(
        'model'=>$model,
    ));
}

并确保:

  • 用户名是唯一的,
  • 您的配置中有相应的网址规则。