我想知道是否可行,或者是否有更简单的方法。
在许多页面上,我想使用关系数据,现在我使用它的每个页面都放置以下代码:
<?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的回答,因为它对我有很大帮助(我需要知道的部分)
答案 0 :(得分:6)
嗯,我不知道这是否是最好的解决方案,但我通常通过扩展CWebUser
来做这样的事情
我要做的是在扩展CWebUser
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'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
'class'=>'CWebUserExtend',//class that extends CWebUser
),
这可以让你做点什么
Yii::app()->user->getUserAccname();
希望有所帮助
答案 1 :(得分:3)
类似于Afnan的答案,但只是我的2美分。我像Afnan建议的那样扩展webuser类,但也有一个account
模型,我将其用于数据库访问和模型规则。我通过在ExWebUser
类上添加一个函数来访问它:
public function getAccount(){
return Account::model()->findByPk($this->id);
}
这允许我使用Yii::app()->user->account->name
访问它,如果你有很多事情要做,这比使用每个动作的方法要干净得多。
P.S
通过将结果缓存在扩展类的私有变量中并可能在init()
方法上预加载,显然可以大大改善这一点。
答案 2 :(得分:0)
感谢您的帮助!我只是注意到我必须将您的代码更改为:
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