![](/img/trans.png)
[英]yii2 chang YII:$app->user to Yii::$app->admin?
[英]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.