如果在用户登录后想额外调用除 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('*'), ), ); }
相关推荐
否则需要给出存放生成二维码图片的文件名及路径; 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%),这个参数控制...
CComponent几乎是所有类的基类,它控制着组件与事件的管理,其方法与属性如下,私有变量$_e数据存放事件(evnet,有些地方叫hook),$_m数组存放行为(behavior)。 组件管理 YII是一个纯oop框架,很多类中的成员变量的...
"static/modules", "jsDest": "js/modules", "checkPath": "protected/views"}参数说明:jsSrc:javascript文件路径(目前只支持单一文件夹)jsDest: release javascript文件存放路径checkPath:存在引用javascript...
本文实例讲述了YII2框架中actions的作用与使用方法。分享给大家供大家参考,具体如下: 我们常在控制器中看到一个actions的方法,这个方法具体的作用是共用...//我们需要继承yii\base\Action类 class TestAction ext
这里有两张表,表结构如下,locations表存放的省份和邮编等信息,两张表的model和curd均使用gii生成 yii2advanced.customers表 customer_id:int(11) customer_name:varchar(100) zip_code:varchar(20) city:varchar...
前言: 由于我的YII2版本是2.0.7, 设置多语言时和其他教程有...2. 手动创建一个文件夹messages来存放多语言相关文件, 如果是advanced版本则在frontend下面创建这个文件夹 3. 创建i18n配置文件 yii message/config fron
#####Yii框架的路由以安全方面的研究 基础核心类共有69个 其中抽象类共有10个 接口类共有15个 其余全为动态加载 详情见: 全部类共有 208个 Yii框架目录结构 . ├── base // 底层核心类库 ├── caching // 所有的...
YII中的日志很好很强大,允许你把日志信息存放到数据库,发送到制定email,存放咋文件中,意见显示页面是,甚至可以用来做性能分析。 YII中日志的基本配置:/yii_dev/testwebap/protected/config/main.php 'log'=>...
我的理解就是布局存放了视图文件中的相同代码,使用布局文件可以减少视图文件代码的冗余。下面介绍如何使用Yii的布局文件。 首先在views\layouts下面创建自己的布局文件 common.php <!doctype html> <...
一个好的框架是肯定离不开缓存的使用,相反,一个没有缓存的框架也肯定不是一个好框架,好像是一个意思,不管了,我们先来看看...所谓的文件缓存,其实就是把我们要缓存的数据存放到文件内,那数据又缓存到哪里了呢?
2.压缩文件存放在根目录 /upload/zipfile/年月/自定义的压缩文件名.zip 3.点击下载压缩包,系统开始对压缩文件打包,打包完成后自动开始下载 4.为了防止暴露压缩包文件路径,需要对下载的压缩包文件名改名 ...
但YAF的缺点是,功能非常不完善,在我看来只是简单实现了MVC结构及路由,分发等功能,像一些ORM之类的功能完全没有开发,作者好像也没有开发的意思:) 后来就发现了Phalcon,一看文档就爱上了她,功能,速度等都是...
directive.js full stack nodejs web mvc ...运行网站时,会首先使用less编译css,然后存放到根目录下assets文件夹下的css目录下。如果配置文档指定develop为false,则压缩后放到assets目录下。js文件也会压缩。
通过查看时间线,本站在获取HTML文档时,花费的时间不到总响应时间的20%,优化之前没有使用缓存,所有的数据都是从数据库读取,这里,我们使用静态页面缓存,将首页整个页面完全的存放在缓存中(关于YII静态页面缓存...