1、創(chuàng)建修改密碼控制器
創(chuàng)建一個(gè)空的控制器
php think make:controller admin@Manager --plain
提示這個(gè)就創(chuàng)建好了
2坡垫、調(diào)試(頁(yè)面加載擎淤、數(shù)據(jù)提交和響應(yīng))
(1)創(chuàng)建后臺(tái)方法 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個(gè)字符</div></div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label">
<span class="x-red">*</span>確認(rèn)密碼</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="">確認(rèn)修改</button></div>
</form>
</div>
</div>
(3)js部分
(4)通過(guò)打印結(jié)果我們可以看出數(shù)據(jù)新舊密碼都在field內(nèi)佛纫,想后臺(tái)發(fā)送的數(shù)據(jù)改為data.field
(5)打印查看傳遞給后臺(tái)的數(shù)據(jù)
(6)調(diào)試與后臺(tái)通訊踢步,并未實(shí)際調(diào)試成功
3、后臺(tái)模型講解
(1)講解如果引入的是
use think\facade\Request;
halt($request::post());
ruguo
如果引用的是
use think\post;
halt($request->post());
(2)創(chuàng)建模型
php think make:model admin@Manager
admin\model\Manager.php
admin\controller\Manager.php
前臺(tái)已經(jīng)可以彈出后臺(tái)模型中的提示信息
4颤霎、管理員密碼修改-數(shù)據(jù)處理
(1)js部分 與2(6)中一致
<script>layui.use(['form', 'layer'],
function() {
$ = layui.jquery;
var form = layui.form,
layer = layui.layer;
//監(jiān)聽(tīng)提交
form.on('submit(save)',
function(data) {
console.log();
//發(fā)異步,把數(shù)據(jù)提交給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);
//關(guān)閉當(dāng)前frame
parent.layer.close(index);
}
layer.close(alert_index);
});
});
return false;
});
});</script>
(2)后臺(tái)控制器
//密碼修改
public function dopassword(Request $request)
{
//后臺(tái)登錄了才可以進(jìn)行密碼修改涂滴,這里給一個(gè)模擬的session,最后一個(gè)admin是作用域
session('adminuser','admin','admin');
session('adminid','1','admin');
$data = $request::post();
$result = ManagerModel::store($data);
return json($result);
}
(3)admin/model/manager模型
//處理密碼修改數(shù)據(jù)
public static function store($data){
//判斷舊密碼
$manager = self::find(session('adminid',"",'admin'));
if(!$manager){
return ['code'=>0,'msg'=>'賬號(hào)登錄異常~!!!'];
}
//驗(yàn)證舊密碼
if(password_verify($data['oldpass'],$manager['password'])!==true){
return ['code'=>0,'msg'=>'舊密碼輸入不正確~!'];
}
//新密碼和確認(rèn)密碼
if($data['newpass']!==$data['repass']){
return ['code'=>0,'msg'=>"兩次密碼輸入不一致"];
}
//把新密碼更新到數(shù)據(jù)庫(kù)
$manager->password = password_hash($data['newpass'],PASSWORD_DEFAULT);
$result = $manager->save();
if($result){
return ['code'=>1,'msg'=>'密碼修改成功~!!!'];
}else{
return ['code'=>0,'msg'=>'修改失敗~!'];
}
}
(4)效果
5友酱、管理員密碼修改-驗(yàn)證器的使用
(1)如果app\admin目錄下沒(méi)有validate使用以下命令創(chuàng)建驗(yàn)證類(lèi)
php think make:validate admin@Manager
(2)app\admin\validate\Manager.php
<?php
declare (strict_types = 1);
namespace app\admin\validate;
use think\Validate;
class Manager extends Validate
{
/**
* 定義驗(yàn)證規(guī)則
* 格式:'字段名' => ['規(guī)則1','規(guī)則2'...]
* @var array
*/
protected $rule = [
'oldpass' => 'require|min:6',
'newpass' => 'require|min:6|confirm:repass',
];
/**
* 定義錯(cuò)誤信息
* 格式:'字段名.規(guī)則名' => '錯(cuò)誤信息'
*/
protected $message = [
'oldpass.require' =>'舊密碼不能為空',
'oldpass.min' =>'舊密碼不能力少于6位',
'newpass.require'=>'新密碼不能為空',
'newpass.min' =>'新密碼不能力少于6位',
'oldpass.confirm' => '兩次密碼不一致',
];
}
(3)app\admin\model\Manager.php 6.0手冊(cè)-驗(yàn)證器
//數(shù)據(jù)的基礎(chǔ)驗(yàn)證
try {
validate(ManagerValidate::class)->check($data);
} catch (ValidateException $e) {
// 驗(yàn)證失敗 輸出錯(cuò)誤信息
return ['code'=>0,'msg'=>$e->getError()];
}
(4)效果
6、自定義函數(shù)和代碼優(yōu)化
主要是優(yōu)化提示消息
(1)在app\admin\common.php 公共方法文件中
<?php
// 這是系統(tǒng)自動(dòng)生成的公共文件
//生成返回?cái)?shù)據(jù)
function return_msg($code=1,$msg='操作成功'){
return['code'=>$code,'msg'=>$msg];
}
(2)模型中app\admin\model\Manager.php
(3)測(cè)試消息提示正常