您好我在yii-user-management扩展名中使用yii
我可以看到如何获得存储在users表中的一些当前记录的用户信息(例如Yii :: app() - > user-> name)
但是我想知道如何获取当前登录用户的相关数据(例如存储在配置文件表中的用户电子邮件)
在YumUser.php模型文件中存在关系
$relations['profile'] = array(self::HAS_ONE, 'YumProfile', 'user_id');
但是我不确定如何直接在View文件中使用它
答案 0 :(得分: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; ?>
答案 1 :(得分: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;
答案 2 :(得分: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 ?>
依旧......