2

嗨,我正在使用带有 yii-user-management 扩展的 yii

我可以看到获取存储在用户表中的一些当前记录的用户信息是多么简单(例如 Yii::app()->user->name)

但是我想知道如何获取当前登录用户的相关数据(例如,存储在配置文件表中的用户电子邮件)

在 YumUser.php 模型文件中有一个关系

$relations['profile'] = array(self::HAS_ONE, 'YumProfile', 'user_id');

但是我不确定如何在视图文件中直接使用它

4

3 回答 3

2

我相信 YUM 文档提出了一种更清洁的方法。YumWebUser 中有一个 data() 方法可以使用户模型可以从 WebUser 实例访问:

// Use this function to access the AR Model of the actually
// logged in user, for example
public function data() {
    if($this->_data instanceof YumUser)
        return $this->_data;
    else if($this->id && $this->_data = YumUser::model()->findByPk($this->id))
        return $this->_data;
    else
        return $this->_data = new YumUser();
}

因此,您应该能够简单地使用:

<?php echo Yii::app()->user->data()->profile->firstname; ?>
<?php echo Yii::app()->user->data()->profile->email; ?>
于 2013-06-21T13:18:33.817 回答
1

如果您需要在用户登录时不会发生变化的信息,您应该setState()在登录时使用函数。

例子:

class MySqlUserIdentity extends CUserIdentity
{

  private $_id;

  public function authenticate()
  {
    $user = User::model()->findByAttributes( array( 'username' => $this->username ) );
    if( $user === null )
      $this->errorCode = self::ERROR_USERNAME_INVALID;
    else if( $user->password !== md5( $this->password ) )
      $this->errorCode = self::ERROR_PASSWORD_INVALID;
    else
    {
      $this->_id = $user->id;
      $this->setState( 'username', $user->username );
      $this->setState( 'name', $user->name );
      $this->setState( 'surname', $user->surname );
      $this->setState( 'email', $user->email );
      $this->errorCode = self::ERROR_NONE;
    }
    return !$this->errorCode;
  }

  public function getId()
  {
    return $this->_id;
  }
}

这样,此信息将保存在会话中,您无需每次都访问数据库。

例子:

echo Yii::app()->user->email;
于 2013-05-17T15:37:07.417 回答
0

好的,我自己发现了

在控制器文件的操作中,我应该放

$user_profile = YumUser::model()->findByPk(Yii::app()->user->id)->profile;
$this->render('index', array('user_profile' => $user_profile));

然后从视图

<?php echo $user_profile->firstname ?>
<?php echo $user_profile->email ?>

等等...

于 2013-05-17T15:08:11.193 回答