簡體   English   中英

Yii從Yii :: app-> user訪問關系數據

[英]Yii accessing relational data from Yii::app->user

我想知道是否有可能或者是否有更簡單的方法來做到這一點。

在許多頁面上,我想使用關系數據,現在我使用它的每個頁面都放置以下代碼:

<?php
    if(!Yii::app()->user->isGuest){
        $user = User::model()->findByPk(Yii::app()->user->id);
    }
?>

所以我可以在視圖中使用以下內容:

$user->account->name

顯示當前用戶相關帳戶的名稱

如果我能做到以下幾點會很好:

Yii::app->user->account->name

設置狀態不是我正在尋找的,因為它不僅是我想要使用的帳戶名,而且我不想為我可能想要使用的所有關系數據添加狀態。

 Solution

 |
 |
 |
 V

我結合了兩個答案的好處來創建以下內容:

class WebUser extends CWebUser {
private $_user;

public function getAccount(){
    if(!$this->isGuest && (!isset($this->_user) || Yii::app()->user->id != $this->_user->id)){
        $this->_user = User::model()->findByPk(Yii::app()->user->id);
    }
    if(!empty($this->_user)){
        return $this->_user->account;
    } else {
        return false;
    }

  }
}

所以現在我可以使用以下內容:

Yii::app()->user->account->name

如果用戶已登錄並且沒有存儲數據或用戶具有不同的id,則上述方法檢索數據。

將它放在組件中,並確保將Afnan談論的部分添加到配置(main.php)

我接受Afnan的答案,因為它對我幫助最大(我需要知道的部分)

嗯,我不知道它是否是最好的解決方案,但我通常通過擴展CWebUser來做這樣的事情

我要做的是在擴展CWebUser Components文件夾中創建文件

class CWebUserExtend extends CWebUser
{
    /**
     *
     * @return the type of user based on forien key of UserType
     */
    public function getUserAccname()
    {
        $user = User::model()->findByPk(yii::app()->user->id);
        if ($user === null)
            return 'error';            
        else
            return $user->account->name;            
    }
}

並在main.php文件中以下列方式修改'User'索引

'user'=>array(
            // enable cookie-based authentication
            'allowAutoLogin'=>true,
                        'class'=>'CWebUserExtend',//class that extends CWebUser
        ),

這可以讓你做點什么

Yii::app()->user->getUserAccname();

希望能幫助到你

類似於Afnan的答案,但只是我的2美分。 我像Afnan建議的那樣擴展webuser類,但也有一個我用於數據庫訪問和模型規則的account模型。 我通過在我的ExWebUser類上使用一個函數來訪問它:

public function getAccount(){
    return Account::model()->findByPk($this->id);
}

這允許我使用Yii::app()->user->account->name訪問它,如果你有很多事情要做,這比使用每個動作的方法要干凈得多。

PS
通過將結果緩存在擴展類的私有變量中並且可能在init()方法上預加載,顯然可以大大改善這一點。

謝謝您的幫助 ! 我只是注意到我必須將您的代碼更改為:

class WebUser extends CWebUser {
private $_user;

public function getAccount(){
    if(!$this->isGuest && (!isset($this->_user) || Yii::app()->user->id != $this->_user->id)){
        $this->_user = User::model()->findByPk(Yii::app()->user->id);
    }
    if(!empty($this->_user)){
        return $this->_user;
    } else {
        return false;
    }

  }
}

我只返回$this->_user來訪問我的用戶屬性,如Yii::app()->user->account->name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM