博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2 Day 5: 创建用户模块
阅读量:6948 次
发布时间:2019-06-27

本文共 2096 字,大约阅读时间需要 6 分钟。

hot3.png

在确定了模块化开发应用的方向后,可以尝试写一个模块练练手啦。首先想到的就是用户模块。

模块设计

前后台用户分离

通常一个应用会存在前台用户和后台用户,这两个用户的Session变量必须是分开的,不然就乱套了。因此,自然地想到用两个组件来分别控制前台用户和后台用户,分别是

  1. user: 对应前台用户
  2. adminUser: 对应后台用户

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, 需要设置不同。

数据表设计

数据表设计遵循的原则是:

  1. 尽量不分表,不影响现有的ActiveRecord的使用
  2. 尽量使用MySQL自带的查询缓存,因此尽可能使用纵向拆分的方式。

安装这两个原则,增加一个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包括:

  1. 本站注册用户登陆
  2. 来自SNS(QQ\Weibo\Kaixin\RenRen..)等第三方用户登录

目录结构

根据上述的设计方案,目录结构如下:

用户模块目录结构

从扩展上考虑,UserService组件封装所有数据库操作,如果将来需要进行分布式部署,只需要重写这部分的操作就可以了。

转载于:https://my.oschina.net/u/248080/blog/356916

你可能感兴趣的文章
nginx 出现413 Request Entity Too Large问题的解决方法
查看>>
Magento版本比较:Magento社区版 vs Magento企业版本 vs MEC Ma...
查看>>
linux (deepin),swoole安装
查看>>
Idea + git 卡顿问题解决
查看>>
python中的输入BIF:input和raw_input
查看>>
scp和rsync限速发送
查看>>
spring-mvc学习1
查看>>
卸载 windows search (KB940157)
查看>>
JAVA IO - list files/direcotries
查看>>
线程池的一些原理
查看>>
计算机存储单位
查看>>
在Html写好的HighChart,迁移入react Ant框架中使用
查看>>
firefox可以在debian jessie通过backports安装了
查看>>
【Android 栈顶app】adb 查看最上层成activity名字
查看>>
Log4j知识汇总
查看>>
Common Lisp牛顿法求平方根
查看>>
Activity 全屏显示
查看>>
做的一个android服务器获取数据json
查看>>
JPA主键生成器和主键生成策略
查看>>
关于HttpURLConnection的使用
查看>>