通过扩展 CWebUser 增加信息到 Yii::app()->user
此教程解释了:如何通过增加一个扩展自 CWebUser 并从名为 User 的数据表中检索用户信息的组件,从 Yii::app()->user 检索更多参数。
也有另外一个方法来完成这个任务,它从 session 或 cookie 中检索变量:
How to add more information to Yii::app()->user (based on session or cookie)。
步骤如下:
1. 确保你已经有一个数据库 User 模型。
2. 创建一个扩展自 CWebUser 的组件。
3. 在 config.php 中指定应用使用的用户类。
1. User 模型应当如下:
<?php
// this file must be stored in:
// protected/models/User.php
class User extends CActiveRecord
{
/**
* Returns the static model of the specified AR class.
* @return CActiveRecord the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
/**
* @return string the associated database table name
*/
public function tableName()
{
return 'User';
}
}
?>
2. 然后我们创建 WebUser 组件:
<?php
// this file must be stored in:
// protected/components/WebUser.php
class WebUser extends CWebUser {
// Store model to not repeat query.
private $_model;
// Return first name.
// access it by Yii::app()->user->first_name
function getFirst_Name(){
$user = $this->loadUser(Yii::app()->user->id);
return $user->first_name;
}
// This is a function that checks the field 'role'
// in the User model to be equal to 1, that means it's admin
// access it by Yii::app()->user->isAdmin()
function isAdmin(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user->role) == 1;
}
// Load user model.
protected function loadUser($id=null)
{
if($this->_model===null)
{
if($id!==null)
$this->_model=User::model()->findByPk($id);
}
return $this->_model;
}
}
?>
3. 最后一步,配置应用
<?php
// you must edit protected/config/config.php
// and find the application components part
// you should have other components defined there
// just add the user component or if you
// already have it only add 'class' => 'WebUser',
// application components
'components'=>array(
'user'=>array(
'class' => 'WebUser',
),
),
?>
现在你可以使用如下命令:
Yii::app()->user->first_name - 返回名字的属性
Yii::app()->user->isAdmin() - 返回 admin 状态的函数
现在你可以增加你想要的任何函数到 WebUser 组件。
分享到:
相关推荐
Yii::app()->user->login($identity); } else { echo $identity->errorMessage; } ``` 当用户退出时,调用`logout()`方法: ```php Yii::app()->user->logout(); ``` `Yii::app()->user` 是Yii中的一个组件,它...
此时,可以调用`Yii::app()->user->login`方法使用户登录系统。 接下来我们深入探讨`Yii::app()->user->login`方法的具体实现。该方法定义在`CWebUser`类中,主要负责以下几个关键步骤: 1. **更改用户身份**:...
如果验证成功,`authenticate()`会设置`_identity`属性,然后在`login()`方法中,使用`Yii::app()->user->login()`将用户身份信息保存到会话,以便进行后续的会话管理。 退出功能相对简单,可以通过`Yii::app()->...
`Yii::app()->user->login`方法是实现用户登录的核心所在,它属于`CWebUser`类。在`CWebUser`类的`login`方法中,会调用`changeIdentity`来改变当前用户的身份信息,包括用户ID、用户名和持久化状态。然后,`login`...
'class'=>'WebUser', // WebUser是一个扩展自CWebUser的类,可以在此基础上自定义用户登录相关的行为 'stateKeyPrefix'=>'member', // 设置一个特定的前缀,用以区分前台和后台的session 'allowAutoLogin'=>true,...