在我們先前的專案中,驗證失敗時直接從 POST 要求返回視圖並不是最好的方法。
當使用者提交包含無效資料的登入表單時,表單會顯示錯誤訊息並將使用者重新導向至登入頁面。但是,如果使用者刷新頁面或導航離開並返回登入頁面,則相同的錯誤訊息仍然存在。
為了解決這個問題,我們可以使用會話來儲存錯誤並實作 PRG 模式。我們可以將錯誤儲存在 $_SESSION 超全域變數中,並將 create.php 中的錯誤語句更新為:
$_SESSION['errors'] = $form->errors(); view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);?? [] ]);
但即使有了這樣的改變,問題仍然存在。為了解決這個問題,我們必須將 return 語句改為:
return redirect ('/login');返回重定向('/login');
我
如果發生任何錯誤,它會將使用者移至登入頁面,但不會向使用者顯示錯誤 w
然後我們刷新 $_SESSION 超全域變數以在短時間內銷毀會話:
return redirect ('/login');$_SESSION['_flashed']['errors'] = $form->errors();
現在您可以注意到問題已解決,但要重構此程式碼,我們必須在類別中新增 PRG 方法
為了重構,我們建立一個名為 Core/Session.php 的新文件,其中包含管理使用者會話的 Session 類別:
return redirect ('/login');
透過使用這個 Session 類,我們可以實作 PRG 模式和會話刷新來管理使用者會話並防止重複的表單提交和不需要的錯誤訊息持久性。
在此文件中,has方法傳回布林值,指示會話中是否存在某個鍵:
return redirect ('/login');。 公共靜態函數 has($key) { return (bool) static::get($key); }
在function.php檔案中,我們重構註銷函數以使用Session類別:
return redirect ('/login');會話::銷毀();
由於該專案已經運作良好。但是我們需要重構 Core/Session.php 中的 get 方法,將程式碼合併到單一語句中:
return redirect ('/login');公共靜態函數 get($key, $default = null) { 返回 $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $預設值; }
在我們今天的專案中進行了大量重構,使其外觀更好、易於理解並提高程式碼的效能。
希望您已經清楚地理解了! .
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3