一、登录部分
(1)在输入域名时,首页判断用户是否进行过登录
在Base控制器中初始化两个方法,根据是否获取到用户的id进行判断,并首先进行执行:
class Base extends Controller { protected function _initialize() { parent::_initialize(); define('USER_ID', Session::get('user_id')); } protected function isLogin() { if (empty(USER_ID)) { $this->error('用户未登录,无权访问', url('user/login')); } } protected function alreadyLogin() { if (!empty(USER_ID)) { $this->error('用户已经登录,请勿重复登录', url('index/index')); } } }
(2)登录场景
使用到thinkphp提供的验证码功能,并进行校验,通过ajax的方式进行用户信息的校验和提交
调用User的控制器中调用checkLogin的方法,获取并校验:
//验证登录 public function checkLogin(Request $request) { //初始返回参数 $status = 0; $result = ''; $data = $request->param(); $rule = [ 'name|用户名' => 'require', 'password|密码' => 'require', 'verify|验证码' => 'require|captcha', ]; $msg = [ 'name' => ['require'=>'用户名不能为空,请检查'], 'password' => ['require'=>'密码不能为空,请检查'], 'verify' => [ 'require' => '验证码不能为空,请检查!', 'captcha' => '验证码错误,请检查!', ], ]; $result = $this->validate($data, $rule,$msg); if ($result === true) { $map = [ 'name' =>$data['name'], 'password' =>md5($data['password']), ]; $user = UserModel::get($map); if ($user === null) { $status = 0; $result = '没有找到该用户'; } else { $status = 1; $result = '验证通过,点击【确定】进入'; Session::set('user_id',$user->id); Session::set('user_info', $user->getData()); $user->setInc('login_count'); } } return ['status'=>$status,'message'=>$result,'data'=>$data]; }
验证码的其他配置参考:https://www.kancloud.cn/manual/thinkphp5/154295
二、主页面及主要功能
这里主要是使用到了thinkphp模板中的内置标签,包括不同角色查看不同的内容,超级管理员可以查看到所有的管理员,并可以对他们的内容进行修改,而普通的管理员只可以对自己的信息进行修改。
主页面显示的信息:
<tr> <th width="30%">服务器计算机名</th> <td><span id="lbServerName">{$Reque </tr> <tr> <td>服务器IP地址</td> <td>{$Request.ip}</td> </tr> <tr> <td>服务器域名</td> <td>{$Request.domain}</td> </tr> <tr> <td>当前PHP版本</td> <td>{$Think.const.PHP_VERSION}</td> </tr> <tr> <td>服务器版本 </td> <td>{$Think.const.PHP_OS}</td> </tr> <tr> <td>当前请求URL</td> <td>{$Request.url.true}</td> </tr> <tr> <td>当前Session数量 </td> <td>{:count($_SESSION)}</td> </tr> <tr> <td>当前SessionID </td> <td>{:session_id()}</td> </tr>
三、对管理员的操作
对管理员的操作主要包括超级管理员对管理员状态的修改,可以对管理员登录系统进行控制,添加新的管理员;删除管理员;和批量恢复删除的管理员;
(1)显示管理员列表及权限控制
//显示管理员界面 public function adminList() { $this->assign('title', '管理员列表'); $this->assign('keywords', '教学管理系统'); $this->assign('dsc', '教学案例'); $this->view->count = UserModel::count(); $userName = Session::get('user_info.name'); if ($userName == 'admin') { $list = UserModel::all(); } else { $list=UserModel::all(['name'=>$userName]); } $this->assign('list', $list); return $this->fetch('admin_List'); }
对权限的控制:
{eq name="$Think.session.user_info.name" value="admin"} {if condition="$vo.status eq '已启用'"} <a style="text-decoration:none" onClick="admin_stop(this,{$vo.id})" href="javascript:;" title="停用"> <i class="Hui-iconfont"></i> </a> {else /} <a style="text-decoration:none" onClick="admin_start(this,{$vo.id})" href="javascript:;" title="启用"> <i class="Hui-iconfont"></i> </a> {/if} {/eq}
(2)添加管理员
//添加管理员提交 public function addUser(Request $request) { $data = $request->param(); $status = 1; $message = '添加成功'; $rule = [ 'name|用户名' => "require|min:3|max:10", 'password|密码' => "require|min:3|max:10", 'email|邮箱' => 'require|email' ]; $result = $this -> validate($data, $rule); if ($result === true) { $user= UserModel::create($request->param()); if ($user === null) { $status = 0; $message = '添加失败~~'; } }else{ $status = 0; $message = '添加失败~~'; } return ['status'=>$status, 'message'=>$message]; }
(3)批量恢复管理员与删除管理员
主要是在设计数据库的时候,增加一个is_delete的字段,当选择删除时,修改字段值为1,并记录修改删除的时间
同理,批量的恢复了逻辑就是把is_delete字段值为1的重新变为0,并且把删除时间字段置空。这其实也就是软删除的操作。
//删除用户 public function deleteUser(Request $request) { $user_id = $request->param('id'); UserModel::update(['is_delete' => 1], ['id' => $user_id]); UserModel::destroy($user_id); } //恢复删除内容 public function unDelete() { UserModel::update(['delete_time'=>null],['is_delete'=>1]); }
四、对班级、教师、学生的操作
有了之前对管理员的操作基础、后面的内容其实已经可以根据自己的逻辑来逐步实现。
(1)班级列表
(2)添加教师
(3)学生列表
对于列表中显示数据,会用到分页的功能,拿学生列表的显示来说明:
在页面中使用:
<div class="container"> <div class="row"> <div class="col-md-4"></div> <div class="col-md-4">{$studentList->render()}</div></div> <div class="col-md-4"></div> </div>
在控制器中使用模型中自带的分页方法进行分页操作:
$studentList = StudentModel::paginate(8);
五、总结
这是我第一个使用thinkphp制作的小项目,其中存在诸多问题,比如首先要说道的安全性的问题,在后续的内容中我会采用到AES对一些重要的数据进行加密,另外,没有进行路由配置,都是直接通过模块-》控制器-》方法进行操作,这也是需要改进的地方,还有分页的操作,模型自带的分页操作感觉不够灵活,后续会更新采用layui进行分页的方法。