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