1、创建修改密码控制器
创建一个空的控制器
php think make:controller admin@Manager --plain
提示这个就创建好了
2、调试(页面加载、数据提交和响应)
(1)创建后台方法 app\admin\controller\Manager.php
<?php
declare (strict_types = 1);
namespace app\admin\controller;
use think\facade\Request;
class Manager
{
//加载视图
public function setpassword()
{
return view();
}
//密码修改
public function dopassword()
{
return view();
}
}
(2)模板部分代码
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form">
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label">
<span class="x-red">*</span>旧密码</label>
<div class="layui-input-inline">
<input type="password" id="L_repass1" name="oldpass" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="L_pass" class="layui-form-label">
<span class="x-red">*</span>新密码</label>
<div class="layui-input-inline">
<input type="password" id="L_pass" name="newpass" required="" lay-verify="required" 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="L_repass" class="layui-form-label">
<span class="x-red">*</span>确认密码</label>
<div class="layui-input-inline">
<input type="password" id="L_repass" name="repass" required="" lay-verify="required" autocomplete="off" class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label"></label>
<button class="layui-btn" lay-filter="save" lay-submit="">确认修改</button></div>
</form>
</div>
</div>
(3)js部分
image.png
(4)通过打印结果我们可以看出数据新旧密码都在field内,想后台发送的数据改为data.field
image.png
image.png
(5)打印查看传递给后台的数据
image.png
image.png
(6)调试与后台通讯,并未实际调试成功
image.png
image.png
image.png
image.png
image.png
3、后台模型讲解
(1)讲解如果引入的是
image.pnguse think\facade\Request;
halt($request::post());
ruguo
如果引用的是
image.pnguse think\post;
halt($request->post());
(2)创建模型
image.png image.pngphp think make:model admin@Manager
admin\model\Manager.php
image.png
admin\controller\Manager.php
image.png
前台已经可以弹出后台模型中的提示信息
image.png
4、管理员密码修改-数据处理
(1)js部分 与2(6)中一致
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//监听提交
form.on('submit(save)',
function(data) {
console.log();
//发异步,把数据提交给php
$.post("{:url('Manager/dopassword')}",data.field,
function (res) {
var alert_index;
alert_index=layer.alert(res.msg, {
icon: 6
},
function() {
if(res.code == 1){
// 获得frame索引
var index = parent.layer.getFrameIndex(window.name);
//关闭当前frame
parent.layer.close(index);
}
layer.close(alert_index);
});
});
return false;
});
});</script>
(2)后台控制器
//密码修改
public function dopassword(Request $request)
{
//后台登录了才可以进行密码修改,这里给一个模拟的session,最后一个admin是作用域
session('adminuser','admin','admin');
session('adminid','1','admin');
$data = $request::post();
$result = ManagerModel::store($data);
return json($result);
}
(3)admin/model/manager模型
//处理密码修改数据
public static function store($data){
//判断旧密码
$manager = self::find(session('adminid',"",'admin'));
if(!$manager){
return ['code'=>0,'msg'=>'账号登录异常~!!!'];
}
//验证旧密码
if(password_verify($data['oldpass'],$manager['password'])!==true){
return ['code'=>0,'msg'=>'旧密码输入不正确~!'];
}
//新密码和确认密码
if($data['newpass']!==$data['repass']){
return ['code'=>0,'msg'=>"两次密码输入不一致"];
}
//把新密码更新到数据库
$manager->password = password_hash($data['newpass'],PASSWORD_DEFAULT);
$result = $manager->save();
if($result){
return ['code'=>1,'msg'=>'密码修改成功~!!!'];
}else{
return ['code'=>0,'msg'=>'修改失败~!'];
}
}
(4)效果
image.png
image.png
5、管理员密码修改-验证器的使用
(1)如果app\admin目录下没有validate使用以下命令创建验证类
image.pngphp think make:validate admin@Manager
image.png
(2)app\admin\validate\Manager.php
<?php
declare (strict_types = 1);
namespace app\admin\validate;
use think\Validate;
class Manager extends Validate
{
/**
* 定义验证规则
* 格式:'字段名' => ['规则1','规则2'...]
* @var array
*/
protected $rule = [
'oldpass' => 'require|min:6',
'newpass' => 'require|min:6|confirm:repass',
];
/**
* 定义错误信息
* 格式:'字段名.规则名' => '错误信息'
*/
protected $message = [
'oldpass.require' =>'旧密码不能为空',
'oldpass.min' =>'旧密码不能力少于6位',
'newpass.require'=>'新密码不能为空',
'newpass.min' =>'新密码不能力少于6位',
'oldpass.confirm' => '两次密码不一致',
];
}
(3)app\admin\model\Manager.php 6.0手册-验证器
image.png
//数据的基础验证
try {
validate(ManagerValidate::class)->check($data);
} catch (ValidateException $e) {
// 验证失败 输出错误信息
return ['code'=>0,'msg'=>$e->getError()];
}
(4)效果
image.png
6、自定义函数和代码优化
主要是优化提示消息
(1)在app\admin\common.php 公共方法文件中
<?php
// 这是系统自动生成的公共文件
//生成返回数据
function return_msg($code=1,$msg='操作成功'){
return['code'=>$code,'msg'=>$msg];
}
(2)模型中app\admin\model\Manager.php
image.png
(3)测试消息提示正常
网友评论