?? ??? ??:??? ?? ?? ? ??? ?? ??: Ajax ?? ? ??? ??
管理員添加編輯與軟刪除 添加數(shù)據(jù)的模版admin_add.html也繼承自base父模版。添加的時(shí)候,實(shí)際上是一個(gè)彈層,這個(gè)彈層小窗口中顯示的網(wǎng)頁(yè)是沒(méi)有頭部和菜單的。通過(guò)block標(biāo)簽中間置空的方式刪除繼承自父模版的頭部和菜單。 提交主要都是使用Ajax方式提交。 檢查用戶(hù)名和郵箱是否重復(fù) 在添加數(shù)據(jù)的模版中,運(yùn)用Ajax方法檢查用戶(hù)名和郵箱是否重復(fù)。 //失去焦點(diǎn)時(shí),運(yùn)用Ajax方法檢查用戶(hù)名是否重復(fù) $("#name").blur(function(){ $.ajax({type: 'GET', //提交類(lèi)型 url: "checkUserName", //提交的url地址,使用user控制器下的checkUserName方法進(jìn)行校驗(yàn) data:{name:$(this).val()}, //當(dāng)前需要校驗(yàn)的值,他用對(duì)象的方式給出 dataType: 'json', //當(dāng)前提交的數(shù)據(jù)類(lèi)型為json格式 success: function(data){ //當(dāng)前成功后的回調(diào)函數(shù),檢測(cè)從服務(wù)器上返回的數(shù)據(jù) if (data.status == 1) { //設(shè)置了一個(gè)status屬性,檢測(cè)他的值, 若為1,說(shuō)明校驗(yàn)成功,彈出一個(gè)提示信息 alert(data.message); } else { alert(data.message); } } }); 檢查郵箱是否重復(fù)與檢測(cè)用戶(hù)名重復(fù)的方法基本是一樣的。運(yùn)用的是user控制器下的checkUserEmail方法。 用戶(hù)添加操作 還是運(yùn)用ajax方法進(jìn)行用戶(hù)添加操作。當(dāng)前數(shù)據(jù)全部校驗(yàn)完成后,將當(dāng)前表單中的數(shù)據(jù)序列化,然后提交到user控制器下的addUser方法進(jìn)行處理,若處理成功,返回一個(gè)提示信息,否則彈出一個(gè)失敗信息。這里的提示信息也是在控制器中設(shè)置的。 控制器下檢查用戶(hù)名和郵箱是否重復(fù)的方法 //checkUserName方法,檢查用戶(hù)名是否重復(fù) public function checkUserName(Request $request) { $userName = trim($request->param('name')); //通過(guò)請(qǐng)求對(duì)象的param方法獲取到前端傳遞過(guò)來(lái)的用戶(hù)名 $name = ['name'=>$userName]; $status = 1; //設(shè)置返回值的初始值status為1 $message = '用戶(hù)名可用'; $rule = [ 'name|用戶(hù)名' => "require|min:3|max:10", ]; $result = $this -> validate($name, $rule); if ($result === true) { //當(dāng)前模型靜態(tài)調(diào)用get方法進(jìn)行查詢(xún),條件就是當(dāng)前表單中的name值是否與傳遞過(guò)來(lái)的一致 if (UserModel::get(['name' => $userName])) { //如果在表中查詢(xún)到該用戶(hù)名 $status = 0; $message = '用戶(hù)名重復(fù),請(qǐng)重新輸入!'; } }else{ $status = 0; $message = '用戶(hù)名不可用,請(qǐng)重新輸入!'; } return ['status' => $status, 'message' => $message]; } //checkUserEmail方法,檢查email是否重復(fù) public function checkUserEmail(Request $request) { $userEmail = trim($request -> param('email')); $status = 1; $message = '郵箱可用'; if (UserModel::get(['email'=> $userEmail])) { //查詢(xún)表中找到了該郵箱,修改返回值 $status = 0; $message = '郵箱重復(fù),請(qǐng)重新輸入~~'; } return ['status'=>$status, 'message'=>$message]; } 管理員提交操作 //addUser方法,添加管理員提交操作 public function addUser(Request $request) { $data = $request->param(); $status = 1; $message = '添加成功'; //設(shè)定驗(yàn)證規(guī)則 $rule = [ 'name|用戶(hù)名' => "require|min:3|max:10", 'password|密碼' => "require|min:3|max:10", 'email|郵箱' => 'require|email' ]; $result = $this -> validate($data, $rule); //通過(guò)驗(yàn)證 if ($result === true) { $user= UserModel::create($request->param()); //調(diào)用模型中的靜態(tài)方法create進(jìn)行數(shù)據(jù)添加 if ($user === null) { $status = 0; $message = '添加失敗'; } }else{ $status = 0; $message = '添加失敗'; } //返回當(dāng)前的操作狀態(tài),操作的提示信息給前端的Ajas調(diào)用 return ['status'=>$status, 'message'=>$message]; } 管理員編輯操作 管理員編輯的模版admin_edit.html與添加數(shù)據(jù)的模版admin_add.html一樣,也繼承自base父模版。前端部分都幾乎一樣。重點(diǎn)看后面的Ajas提交部分。 <script> $(function(){ //檢測(cè)當(dāng)前用戶(hù)是否修改了數(shù)據(jù),是,激發(fā)change事件,提交按鈕可用 $("form").children().change(function(){ $("#submit").removeClass('disabled'); }); $("#submit").on("click", function(event){ //在提交按鈕上執(zhí)行Ajax函數(shù) $.ajax({ type: "POST", url: "{:url('user/editUser')}", //請(qǐng)求一個(gè)url地址進(jìn)行處理,位于user/editUser data: $("#form-admin-add").serialize(), //操作的數(shù)據(jù)是當(dāng)前表單序列化的值 dataType: "json", success: function(data){ //處理成功后的回調(diào)函數(shù) if (data.status == 1) { alert(data.message); layer_close(); } else { alert(data.message); } } }); }) }) </script>
軟刪除功能 在自定義模型User.php中,第一步,用use關(guān)鍵字引入當(dāng)前框架traits\model中的SoftDelete類(lèi)(這個(gè)類(lèi)在edu\thinkphp\library\traits\model\SoftDelete.php中)這個(gè)類(lèi)定義了一些軟刪除的方法。第二步,在當(dāng)前的自定義模型use中,再用use關(guān)鍵字引入軟刪除的方法集,然后設(shè)置$deleteTime屬性,屬性值設(shè)置為delete_time,他會(huì)記錄當(dāng)前的記錄時(shí)間,而且一定要與數(shù)據(jù)庫(kù)表中的delete_time字段一致。
2019-05-090個(gè)贊