霓每搅冯昧敖虽烘感估俊箱释
管理员管理的实现
新建User.php模型类
<?php namespace app\common\model; use think\Model; class User extends Model { //配置数据库连接参数 protected $connection = 'db_qiye'; //配置模型绑定的数据表 protected $table = 'user'; //配置数据表的主键id protected $pk = 'user_id'; //开启自动时间戳功能 protected $autoWriteTimestamp = true; //设置自动更新的字段名称 protected $update_time = 'update_time'; }
新建User.php控制类
<?php namespace app\admin\controller; use app\common\controller\Base; use app\common\model\User as UserModel; class User extends Base { //用户信息列表 public function index() { //获取管理员信息 $user=UserModel::get(1); //模板赋值 $this->view->assign('user',$user); //渲染模板 return $this->view->fetch(); } public function adminEdit() { //接收user_id $user_id=$this->request->param('user_id'); //获取信息 $user=UserModel::get($user_id); //模板赋值 $this->view->assign('user',$user); //渲染模板 return $this->view->fetch(); } //处理对管理员信息的修改 public function doEdit() { $user_id=$this->request->param('user_id'); $user_name=$this->request->param('user_name'); $email=$this->request->param('email'); $password=$this->request->param('password'); $password=md5($password); //设置更新的字段 $data=['user_name'=>$user_name,'email'=>$email,'password'=>$password]; $where=['user_id'=>$user_id]; if(UserModel::update($data,$where)) { return ['status'=>0,'msg'=>'修改成功']; } } }
创建index.html和admin_edit.html
index.html
{include file="common@header"} <div class="x-nav"> <span class="layui-breadcrumb"> <a href="">首页</a> <a href="">会员管理</a> <a> <cite>管理员列表</cite></a> </span> <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" href="javascript:location.replace(location.href);" title="刷新"> <i class="layui-icon" style="line-height:30px">ဂ</i></a> </div> <div class="x-body"> <table class="layui-table"> <thead> <tr> <th>ID</th> <th>用户名</th> <th>邮箱</th> <th>登录IP</th> <th>登录次数</th> <th>更新时间</th> <th>操作</th> </thead> <tbody> <tr> <td>{$user.user_id}</td> <td>{$user.user_name}</td> <td>{$user.email}</td> <td>{$user.login_addr}</td> <td>{$user.login_count}</td> <td>{$user.update_time}</td> <td class="td-manage"> <a title="编辑" onclick="x_admin_show('编辑','{:url(\'adminEdit\')}?user_id={$user.user_id}')" href="javascript:;"> <i class="layui-icon"></i> </a> </td> </tr> </tbody> </table> </div> <script> layui.use('laydate', function(){ var laydate = layui.laydate; //执行一个laydate实例 laydate.render({ elem: '#start' //指定元素 }); //执行一个laydate实例 laydate.render({ elem: '#end' //指定元素 }); }); </script> </body> </html>
admin_edit.html
{include file="common@header"} <div class="x-body"> <form class="layui-form"> <div class="layui-form-item"> <label for="user_name" class="layui-form-label"> <span class="x-red">*</span>用户名 </label> <div class="layui-input-inline"> <input type="text" id="user_name" name="username" required="" lay-verify="required" autocomplete="off" value="{$user.user_name}" class="layui-input"> </div> </div> <div class="layui-form-item"> <label for="email" class="layui-form-label"> <span class="x-red">*</span>邮箱 </label> <div class="layui-input-inline"> <input type="text" value="{$user.email}" id="email" name="email" required="" lay-verify="email" autocomplete="off" class="layui-input"> </div> <div class="layui-form-mid layui-word-aux"> </div> </div> <div class="layui-form-item"> <label for="password" class="layui-form-label"> <span class="x-red">*</span>密码 </label> <div class="layui-input-inline"> <input type="password" id="password" name="password" required="" lay-verify="pass" autocomplete="off" class="layui-input"> </div> <div class="layui-form-mid layui-word-aux"> 6到16个字符 </div> </div> <div class="layui-form-item"> <label for="repassword" class="layui-form-label"> <span class="x-red">*</span>确认密码 </label> <div class="layui-input-inline"> <input type="password" id="repassword" name="repassword" required="" lay-verify="repass" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="add" lay-submit=""> 修改 </button> </div> </form> </div> <script> layui.use(['form','layer'], function(){ $ = layui.jquery; var form = layui.form ,layer = layui.layer; //自定义验证规则 form.verify({ nikename: function(value){ if(value.length < 5){ return '昵称至少得5个字符啊'; } } ,pass: [/(.+){6,12}$/, '密码必须6到12位'] ,repass: function(value){ if($('#password').val()!=$('#repassword').val()){ return '两次密码不一致'; } } }); //监听提交 //监听提交 form.on('submit(add)', function(data){ console.log(data); //发异步,把数据提交给php //以post方式提交到服务器 $.post("{:url('doEdit')}",{ 'user_id':{$user.user_id}, 'user_name':$('#user_name').val(), 'email':$('#email').val(), 'password':$('#password').val() },function(data){ if(data.status==0) { layer.alert(data.msg, {icon: 6},function () { // 获得frame索引 var index = parent.layer.getFrameIndex(window.name); //关闭当前frame parent.layer.close(index); }); } else { layer.alert("保存失败", {icon: 6},function () { // 获得frame索引 var index = parent.layer.getFrameIndex(window.name); //关闭当前frame parent.layer.close(index); }); } }) return false; }); }); </script> </body> </html>
效果:
管理员登录的实现
控制器User.php中创建login()方法
<?php namespace app\admin\controller; use app\common\controller\Base; use app\common\model\User as UserModel; use think\Session; class User extends Base { //用户登录 public function login() { return $this->view->fetch(); } //处理用户登录的操作 public function doLogin() { $email=trim($this->request->param('email')); $password=md5(trim($this->request->param('password'))); $user=UserModel::get(1); if($email!=$user['email']) { return ['status'=>1,'msg'=>'邮箱错误']; } elseif ($password!=$user['password']) { return ['status'=>2,'msg'=>'密码错误']; } else { return ['status'=>0,'msg'=>'登录成功']; } //登录成功,将用户名设置到session会话中 Session::set('user_name',$user['user_name']); } //用户信息列表 public function index() { //获取管理员信息 $user=UserModel::get(1); //模板赋值 $this->view->assign('user',$user); //渲染模板 return $this->view->fetch(); } public function adminEdit() { //接收user_id $user_id=$this->request->param('user_id'); //获取信息 $user=UserModel::get($user_id); //模板赋值 $this->view->assign('user',$user); //渲染模板 return $this->view->fetch(); } //处理对管理员信息的修改 public function doEdit() { $user_id=$this->request->param('user_id'); $user_name=$this->request->param('user_name'); $email=$this->request->param('email'); $password=$this->request->param('password'); $password=md5($password); //设置更新的字段 $data=['user_name'=>$user_name,'email'=>$email,'password'=>$password]; $where=['user_id'=>$user_id]; if(UserModel::update($data,$where)) { return ['status'=>0,'msg'=>'修改成功']; } } }
创建login.html登录模板文件
{include file="common@header"} <body class="login-bg"> <div class="login layui-anim layui-anim-up"> <div class="message">管理员登录</div> <div id="darkbannerwrap"></div> <form method="post" class="layui-form" > <input name="username" placeholder="邮箱" type="text" lay-verify="required" class="layui-input" id="email"> <hr class="hr15"> <input name="password" lay-verify="required" placeholder="密码" type="password" class="layui-input" id="password"> <hr class="hr15"> <input value="登录" lay-submit lay-filter="login" style="width:100%;" type="submit"> <hr class="hr20" > </form> </div> <script> $(function () { layui.use('form', function(){ var form = layui.form; form.on('submit(login)', function(data){ //异步提交数据验证 $.post("{:url('doLogin')}",{ "email":$("#email").val(), "password":$("#password").val() },function(data){ if(data.status==0) { layer.msg(data.msg,function(){ //登录成功,跳转到主页 location.href="{:url('Index/index')}" }); } else { //验证失败,跳转到登录页 layer.msg(data.msg,function () { location.href='{:url("User/login")}' }) } },'json') return false; }); }); }) </script> <!-- 底部结束 --> </body> </html>
执行登录,通过post()提交数据到User.php中的doLogin()方法
注意,如想要让layui的弹出信息显示正确,必须在post提交时显式执行传输类型为json
验证用户登录的实现,即管理员必须先登录才能进行操作,管理员没有登录访问任何控制器都会跳转到User控制器下的login()方法
在Base.php创建 isLogin()方法,如果session不存在则跳转至user/login()
<?php //公共控制器 namespace app\common\controller; // 引入系统控制器 use think\Controller; //引入tp的session类 use think\facade\Session; class Base extends Controller { protected function initialize() { //必须先继承父类的初始化方法 parent::initialize(); //使用过滤函数替换 fiter里面使用闭包(匿名函数) $this->filter(function($content){ //使用字符串替换函数 return str_replace('__ADMIN__','/static/admin',$content); }); } //判断用户是否已登录?应该放在公共控制器供所有控制器共享 protected function isLogin() { //如果没有登录,并且当前操作不是登录,则提示用户登录并跳转到登录页面 if(!Session::has('user_name')) { //如果不存在名为user_name的session表明没有登录,跳转到user控制器下的login方法 $this->error('请登录','user/login'); } } //判断用户是否已经登录了?如果已登录,应该提示用户不要重复登录 protected function islogined() { if(Session::has('user_name')) { $this->error('不要重复登录'); } } }
注意:这里使用了tp51里面的Session类 需要在头部引入
use think\facade\Session;
在如下控制器类中添加前置方法
//前置方法 //所有操作都必须执行'isLogin'操作:检测是否已登录 //即所有的操作开始之前都会执行Base类中的isLogin()方法检查session是否存在 //session存在才允许执行后续操作 protected $beforeActionList =['isLogin'];
即在这些类中执行任何操作都必须先执行Base.php中的isLogin()方法
此时访问这些操作类中的任何方法都会自动跳转到登录页面
退出登录功能实现
user.php中创建logout()
退出登录模板添加url
此时点击退出登录即跳转到登录页面
显示站点信息:在公共文件common.php中创建getSiteName()
在模板文件中调用:
成功显示站点信息:
Base.php检测是否重复登录的方法
//判断用户是否已经登录了?如果已登录,应该提示用户不要重复登录 protected function islogined() { if(Session::has('user_name')) { $this->error('不要重复登录'); } }
User.php前置方法的写法:
//前置方法 protected $beforeActionList = [ //判断用户是否已登录? 'islogined' => ['only'=>'login'] ];
代码解释:只有User.php控制器下的login方法才会执行islogined()方法
此时如果在登录的情况下再次进入登录界面,会提示如下信息
User.php中完整前置方法的写法:
//前置方法 protected $beforeActionList = [ 'isLogin'=>['only'=>'index,adminEdit,doEdit'], //判断用户是否已登录? 'islogined' => ['only'=>'login'] ];
即只有index,adminEdit,doEdit执行是否登录的验证,只有login执行是否重复登录的验证
呻锻甩祥钡茂喝券井持畅皇敦