标签:http ar io os 使用 sp for on 数据
在确定了模块化开发应用的方向后,可以尝试写一个模块练练手啦。首先想到的就是用户模块。
通常一个应用会存在前台用户和后台用户,这两个用户的Session变量必须是分开的,不然就乱套了。因此,自然地想到用两个组件来分别控制前台用户和后台用户,分别是
Yii2 对用户Session的存储与Yii1不同,原来适用于Yii1的前后台分类的方式,不再适用于Yii2,不过稍做修改就可以了,web.php里的相关代码片段如下:
‘user‘ => [ // Webuser for the frontend ‘class‘ => ‘\yii\web\User‘, ‘loginUrl‘ => array(‘/user/login/member‘), ‘identityClass‘ => ‘app\modules\user\models\MemberIdentify‘, ‘idParam‘ => ‘_mId‘, ‘identityCookie‘ => [‘name‘=>‘_ff‘,‘httpOnly‘ => true], ], ‘adminUser‘ => array( // Webuser for the admin area (admin) ‘class‘ => ‘\yii\web\User‘, ‘loginUrl‘ => array(‘/user/login/admin‘), ‘identityClass‘ => ‘app\modules\user\models\AdminIdentify‘, ‘idParam‘ => ‘_aId‘, ‘identityCookie‘ => [‘name‘=>‘_aa‘,‘httpOnly‘ => true], ),
关键点在于idParam, 需要设置不同。
数据表设计遵循的原则是:
安装这两个原则,增加一个Migration, 具体的内容如下:
$this->createTable(‘{{member}}‘, [ ‘id‘ => ‘pk‘, ‘username‘ => ‘varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL‘, ‘password‘ => ‘varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL‘, ‘source‘=>‘int unsigned not null‘, ‘create_time‘=>‘int unsigned not null‘, ],‘ENGINE InnoDB DEFAULT CHARSET utf8 PARTITION BY RANGE (id) ( PARTITION p0 VALUES LESS THAN (3), PARTITION p1 VALUES LESS THAN (6), PARTITION p2 VALUES LESS THAN (9), PARTITION p3 VALUES LESS THAN (12), PARTITION p4 VALUES LESS THAN MAXVALUE )‘ );
借助MySQL的表分区功能,以id为基础进行表分区。为了最大化利用查询缓存,减少表更新操作的影响,这里把通常用户表会有的last_visited, update_time等移到另外一个表里,从而保证在反复查询用户验证信息时,能利用MySQL的查询缓存。
用户模块的两个主控制器,登陆控制器和登出控制器,处理所有的用户登录登出逻辑,以LoginController为例,包含的action包括:
根据上述的设计方案,目录结构如下:
从扩展上考虑,UserService组件封装所有数据库操作,如果将来需要进行分布式部署,只需要重写这部分的操作就可以了。
创建了一个开源工程,方便大家查看代码。http://git.oschina.net/linwx/Meta
标签:http ar io os 使用 sp for on 数据
原文地址:http://my.oschina.net/u/248080/blog/356916