Yii从Yii::app-> user访问关系数据 - php

我想知道是否有可能或者是否有更简单的方法来做到这一点。

我想在许多页面上使用关系数据,现在我使用的每个页面上都放置以下代码:

<?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);…