我想知道是否有可能或者是否有更简单的方法来做到这一点。
我想在许多页面上使用关系数据,现在我使用的每个页面上都放置以下代码:
<?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'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
'class'=>'CWebUserExtend',//class that extends CWebUser
),
这可以让你做点什么
Yii::app()->user->getUserAccname();
希望能帮助到你
php:将分钟取整到最近的四分之一小时,然后执行更多操作 - php最初的问题是这样的:取分钟数->转换为四分之一小时-> 1个四分之一小时为1个单位->输出单位我今天整天都在整理页面,几分钟前我的大脑就停止工作了,我只是不知道如何输出单位数量。我知道在此网站上发布问题会有所帮助。因此,用户输入的分钟数(不是小时和分钟,而是数分钟),站点需要输出单位数量。单位是一个刻钟。分钟总是四舍五入到最近的四分之一小时…
php Singleton类实例将在多个会话中保留吗? - php举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…
PHP:填写数组中的“空白” - php我有一个php数组(通过表单中的复选框值获取-您知道复选框仅在未设置时显示在_POST变量中)。Array ( [2] => 0,2 [3] => 0,3 ) 我需要一种方法来“填补” 0-5之间的差距。所以上面看起来像(用'-1'填充空白。我尝试用填充有'-1'的数组array_merge(),但这没用。Array ( [0] => -1…
PHP:对数组排序 - php请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…
PHP:检查谁看过发送的电子邮件? - php我正在向某些用户发送电子邮件,并且想知道是谁阅读的,这意味着如果有人阅读了该电子邮件,则将维护一个日志文件,其中包含该用户的电子邮件地址以及日期/时间/ IP。为此,我发送一个带有电子邮件(html模板)的javascript函数,当用户打开该电子邮件时,它仅会警告用户的电子邮件地址,例如:for($n=0; $n<sizeof($checkBox);…