2014-02-18 75 views
0

我使用「警予用戶」(模塊/用戶),用戶現在的網址是mysite.com/user/user/view/id/1,我想改變爲mysite.com/profile/username用戶名而不是URL ID - 警予用戶

用戶控制器:

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

我嘗試添加此url規則'profile/<username>' => 'user/user/view',但它仍然無法工作,因爲模型需要url中的id。

有什麼想法嗎?

+0

您可以在URL管理器 –

+0

中編寫規則我寫這樣 - 'profile/'=>'user/user/view',並且不工作,因爲模型需要url中的id,我期待對於這個解決方案,thanx –

+0

如果你只想在url中使用用戶名,你必須將'findByPk($ id)'改成'findByAttributes(array('username'=> $ username))'' – feco

回答

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

,並確保:

  • 用戶名是唯一的,
  • 你必須在你的配置相應的URL規則。
+0

thanx非常多你幫助我很多! –

相關問題