`
stevecj
  • 浏览: 106008 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

通过扩展 CWebUser 增加信息到 Yii::app()->user

    博客分类:
  • PHP
阅读更多
通过扩展 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中新增一个用户验证的方法详解

    Yii::app()-&gt;user-&gt;login($identity); } else { echo $identity-&gt;errorMessage; } ``` 当用户退出时,调用`logout()`方法: ```php Yii::app()-&gt;user-&gt;logout(); ``` `Yii::app()-&gt;user` 是Yii中的一个组件,它...

    Yii 的登录流程

    此时,可以调用`Yii::app()-&gt;user-&gt;login`方法使用户登录系统。 接下来我们深入探讨`Yii::app()-&gt;user-&gt;login`方法的具体实现。该方法定义在`CWebUser`类中,主要负责以下几个关键步骤: 1. **更改用户身份**:...

    Yii框架用户登录session丢失问题解决方法

    本文实例讲述了Yii框架用户登录session丢失问题解决方法。分享给大家供大家参考,具体如下: 最近做项目,使用的是YII框架,用户的登录总是出现有时候能登录,有时候不能登录的情况。...Yii::app()-&gt;getS

    Yii框架实现的验证码、登录及退出功能示例

    如果验证成功,`authenticate()`会设置`_identity`属性,然后在`login()`方法中,使用`Yii::app()-&gt;user-&gt;login()`将用户身份信息保存到会话,以便进行后续的会话管理。 退出功能相对简单,可以通过`Yii::app()-&gt;...

    Yii框架登录流程分析

    `Yii::app()-&gt;user-&gt;login`方法是实现用户登录的核心所在,它属于`CWebUser`类。在`CWebUser`类的`login`方法中,会调用`changeIdentity`来改变当前用户的身份信息,包括用户ID、用户名和持久化状态。然后,`login`...

    Yii中实现处理前后台登录的新方法

    'class'=&gt;'WebUser', // WebUser是一个扩展自CWebUser的类,可以在此基础上自定义用户登录相关的行为 'stateKeyPrefix'=&gt;'member', // 设置一个特定的前缀,用以区分前台和后台的session 'allowAutoLogin'=&gt;true,...

    Yii权威指南思维导图

    Yii框架是基于组件的高性能PHP框架,用于开发Web2.0应用。该框架以其高效、灵活和可扩展性而闻名,被广泛...通过仔细研究这个思维导图,开发者可以更深入地理解Yii的每一个方面,从而更好地运用到实际项目开发中去。

    yii框架源代码

    9. **扩展性**:Yii的插件和模块系统允许开发者轻松添加新的功能,`CModule`类是模块的基类,` yiisoft/extensions `目录存放第三方扩展。 通过对Yii 1.1.14源代码的深入学习,开发者不仅可以提升自己的PHP编程技巧...

    yiiadvancedstructure:Yii 1.1 App 高级结构

    在“Yii 1.1 App 高级结构”中,我们将深入探讨该框架如何组织应用程序的各个部分,以及如何利用这些结构优化项目。 ### 1. MVC 设计模式 Yii 采用 Model-View-Controller(MVC)设计模式,将应用程序的逻辑分为三...

    yii-return-url:通过将请求用作持久存储,跨多个选项卡维护返回 URL 的状态

    你可能会说,Yii 已经用CWebUser::getReturnUrl()和CWebUser::setReturnUrl()方法完美地处理了 returnUrl。 为什么不使用那些? 这些方法将 returnUrl 存储到用户会话中的单个变量中。 当我们打开多个选项卡时,这...

    深入解析yii权限分级式访问控制的实现(非RBAC法)

    Yii框架是一个高性能的PHP5的...总的来说,Yii框架中的过滤器模式虽然简单,但是通过扩展和定制依然可以实现较为复杂的权限分级控制。对于开发者来说,了解并掌握这些权限控制的方法,是开发安全、高效Web应用的基础。

Global site tag (gtag.js) - Google Analytics