如果在用户登录后想额外调用除 user,id之外的数据库变量,可以这样设置:
在登陆验证时候增加额外项:
在UserIdentity.php中
class UserIdentity extends CUserIdentity{ $this->setState('last_login_time',$user->last_login_time); }
如此,在应用程序的任何地方,这个属性可以通过如下获取:Yii::app()->user->getState('last_login_time')
再重新登录看看,
public function setState($key, $value, $defaultValue = null) { $key = $this->getStateKeyPrefix() . $key; if ($value === $defaultValue) unset($_SESSION[$key]); else $_SESSION[$key] = $value; }
其实他将信息放到session中了
其中的user是yii的一个components.需要在protected/config/main.php中定义
'user'=>array( // enable cookie-based authentication 'allowAutoLogin'=>true, 'loginUrl' => array('site/login'), ),
通过扩展CWebUser添加信息到Yii:app()->user
步骤:1、添加$user属性到UserIdentity类。 添加getUser()方法-getter上面这个属性。加setUser($user)方法-setter上面这个属性,它可以赋值给user的信息通过$user这个属性。
用户信息存到数据库表里
我的UserIdentity类例子:
<?php class UserIdentity extends CUserIdentity { /** * User's attributes * @var array */ public $user; public function authenticate() { $this->errorCode = self::ERROR_PASSWORD_INVALID; $user = User::model()->findByAttributes(array('email' => CHtml::encode($this->username))); if ($user) { if ($user->password === md5($user->salt . $this->password)) { $this->errorCode = self::ERROR_NONE; $this->setUser($user); } } unset($user); return !$this->errorCode; } public function getUser() { return $this->user; } public function setUser(CActiveRecord $user) { $this->user = $user->attributes; } } ?>
现在用户的属性已经设置,创建WebUser类并把它放在/protected/components
<?php class WebUser extends CWebUser { public function __get($name) { if ($this->hasState('__userInfo')) { $user = $this->getState('__userInfo', array()); if (isset($user[$name])) { return $user[$name]; } } //this method can user Yii::app()->user->{$user的attribute} return parent::__get($name); } public function login($identity, $duration) { $this->setState('__userInfo', $identity->getUser()); parent::login($identity, $duration); } public function getIsGuest() { $customer = Yii::app()->session->get('customer'); return $customer === null || $customer['id'] === null; } } ?>
记得设置一下这个类Yii::app()->user
<?php 'components'=>array( 'user'=>array( 'class'=>'WebUser', ) ) ?>
调用方法
Yii::app()->user->getIsGuest()
Yii::app()->user->__userInfo;
2用户信息存到单独的文件
<?php class WebUser extends CWebUser { public function getReturnUrl($defaultUrl=null) { $userInfo = $this->getUserInfo(); if(isset($userInfo['url'])){ return $userInfo['url']; } return parent::getReturnUrl($defaultUrl); } protected function afterLogin($fromCookie) { parent::afterLogin($fromCookie); $users = require(dirname(__FILE__) . '/../config/password.php'); $this->setState('userInfo',$users[$this->getName()]); } public function getUserInfo() { return $this->getState('userInfo',array()); } //accessRules roles public function checkAccess($operation,$params=array(),$allowCaching=true) { $userInfo = $this->getUserInfo(); if($userInfo['group'] == $operation){ return true; } return parent::checkAccess($operation,$params,$allowCaching); } }
password.php
<?php return array( 'dianyin' => array( 'pwd' => 'dianyinXX', 'url' => array('dianyin/order/index'), 'merchant_id' => 1, 'group' => 'dianyin', ), 'boer' => array( 'pwd' => 'boerXX', 'url' => array('third_jifen/default/index'), 'merchant_id' => 1, 'group' => 'jifen', ), );
权限checkAccess结合roles
public function accessRules() { return array( array('allow', // allow authenticated users to access all actions 'roles'=>array('jifen'), ), array('allow', // deny all users 'actions'=>array('login','logout'), 'users'=>array('*'), ), array('deny', // deny all users 'users'=>array('*'), ), ); }
相关推荐
5. **vendor**:Composer依赖管理器自动下载的第三方库和Yii框架本身都存放在这里。 6. **runtime**:运行时目录,框架在此生成临时文件,如日志、缓存等。 7. **web**:Web应用的入口点,包含`index.php`,它是Web...
9. **扩展性**:Yii的插件和模块系统允许开发者轻松添加新的功能,`CModule`类是模块的基类,` yiisoft/extensions `目录存放第三方扩展。 通过对Yii 1.1.14源代码的深入学习,开发者不仅可以提升自己的PHP编程技巧...
3. **assets**: 在Yii中,assets目录通常用于存放JavaScript和CSS文件,以及它们的依赖项。在这个插件中,assets目录可能包含Bootstrap的CSS和JS文件,以及任何其他必要的资源文件,确保在页面上正确应用Bootstrap...
- models:存放数据库模型类 - views:包含各个页面的视图模板 - controllers:管理不同功能的控制器 - config:配置文件,如数据库连接信息 - migrations:数据库迁移文件,用于版本控制 - runtime:运行时生成的...
`yiisoft/yii/framework/controllers`包含控制器基类,`yiisoft/yii/framework/views`存储视图文件,`yiisoft/yii/framework/models`存放模型类。 3. **组件化**:Yii的组件系统允许开发者重用代码并实现灵活配置。...
Yii 提供了内置的错误处理和日志系统,允许开发者捕获和记录异常,以及按照配置级别输出日志信息。 通过对 Yii 框架源码的深入分析,我们可以更好地理解其工作原理,这对于优化性能、调试问题以及自定义扩展具有极...
1. `protected/config/main.php`: 这是Yii框架的主要配置文件,其中包含了数据库连接信息、RBAC组件设置以及其他应用配置。 2. `protected/extensions`: 可能包含自定义或第三方的扩展,这些扩展可能为CMS系统提供...
如果一切正常,将会出现提示信息,告知服务器配置已达到运行YII的要求。如果提示不符合要求,则需要对服务器配置进行相应的调整。 ##### 2.2 框架安装 文档中提到的YII框架版本为`yii-1.1.6.r2877`。安装过程包括...
Yii 的命名约定清晰,类前缀为 "C"(接口为 "I"),以减少类名冲突。此外,Yii 充分利用 PHP 的命名空间和自动加载机制,提高代码组织的灵活性。 CComponent 是 Yii 中所有类的基类,提供事件和行为机制,使得扩展...
6. **vendor**:第三方库和依赖包的存放地,由 Composer 管理。 7. **environments**:不同部署环境的配置模板,可以根据需要调整。 8. **tests**:测试目录,包含单元测试和集成测试用例。 9. **.gitignore** 和...
最后,`runtime`目录是Yii2的运行时目录,存放临时文件、日志等。在异步任务执行过程中,可能会生成一些临时文件或记录日志,这些都会被保存在这个目录下。 总之,通过Yii2 Console集成Swoole,我们可以充分利用...
- `vendor`:存放第三方库和Yii框架本身。 - `config`:存储各种配置文件,如数据库连接、路由规则等。 - `runtime`:运行时生成的文件,如日志、session和缓存。 - `web`:部署到Web服务器的目录,包含入口脚本和...
1. 创建一个新的PHP类,继承自`\yii\base\Widget`或`\yii\widgets\BaseWidget`。 2. 在类中定义属性,可以通过`public $property`声明。 3. 实现构造函数,设置默认属性值。 4. 定义`init()`方法,用于在Widget实例...
6. **vendor**:第三方库和 Composer 包的存放地,Yii 框架自身也位于此处。 7. **runtime**:运行时目录,存放临时文件,如日志、缓存等。 8. **tests**:测试目录,包含单元测试和集成测试的相关文件。 安装和...
在新建的应用中,yiic 自动生成了基本的目录结构和文件,包括首页、联系页和登录页。这些页面展示了应用的基本功能,如用户认证和表单提交。 Yii 应用的目录结构通常如下: - `index.php`:Web 应用的入口脚本。 -...
`CApplication`是Yii框架的核心类,负责管理应用的生命周期。构造函数中,它会执行以下操作: - 解析配置,创建组件实例。 - 加载组件的配置。 - 注册错误处理和异常处理机制。 - 初始化Yii的类自动加载器。 -...
在这个目录下,通常会有`config`、`protected`、`runtime`、`webroot`等文件夹,分别存放配置文件、应用逻辑、运行时生成的文件和前端资源。通过研究这些文件,我们可以深入了解如何构建和部署一个在SAE上的Yii应用...
- **models**:存放模型类,用于处理业务逻辑和数据操作。 - **views**:存放视图文件,定义用户界面布局。 - **web**:包含Web服务器需要的公共文件,如index.php入口文件和静态资源。 - **vendor**:存放第三...
- **OOP基础**:面向对象编程的基本概念,如类、对象、继承、封装等。 - **数据库编程**:SQL语言的基础,如数据表的创建、查询、更新等操作。 - **Yii文档阅读**:深入理解Yii框架的官方文档和API手册,以便更好地...