」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 PRG 模式和閃爍進行會話處理

使用 PRG 模式和閃爍進行會話處理

發佈於2024-08-05
瀏覽:100

Session Handling with the PRG pattern and Flashing

在我們先前的專案中,驗證失敗時直接從 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 方法

會話類別(PRG 模式)


為了重構,我們建立一個名為 Core/Session.php 的新文件,其中包含管理使用者會話的 Session 類別:

return redirect ('/login');

  • flash方法將資料儲存在$_SESSION['_flash']陣列中,用於會話刷新。
  • get方法檢查$_SESSION['_flash']中是否有flash資料並回傳。如果沒有,則傳回常規會話資料或預設值。
  • unflash 方法取消設定刷新的數據,使其僅可用於下一個請求。
  • PRG 模式的實作方式是使用 put 方法在會話中儲存數據,重定向(例如,使用 return redirect('/login');),然後使用 get 方法在下一個請求中檢索資料。

    透過使用這個 Session 類,我們可以實作 PRG 模式和會話刷新來管理使用者會話並防止重複的表單提交和不需要的錯誤訊息持久性。

    有方法


    在此文件中,has方法傳回布林值,指示會話中是否存在某個鍵:

    return redirect ('/login');
    
    
    。 公共靜態函數 has($key) { return (bool) static::get($key); }

    重構註銷功能


    在function.php檔案中,我們重構註銷函數以使用Session類別:

    return redirect ('/login');
    
    
    會話::銷毀();

    重構 get 方法


    由於該專案已經運作良好。但是我們需要重構 Core/Session.php 中的 get 方法,將程式碼合併到單一語句中:

    return redirect ('/login');
    
    
    公共靜態函數 get($key, $default = null) { 返回 $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $預設值; }

    在我們今天的專案中進行了大量重構,使其外觀更好、易於理解並提高程式碼的效能。

    希望您已經清楚地理解了! .

    版本聲明 本文轉載於:https://dev.to/ghulam_mujtaba_247/session-handling-with-the-prg-pattern-and-flashing-1jog?1如有侵犯,請聯絡[email protected]刪除
    最新教學 更多>

    免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

    Copyright© 2022 湘ICP备2022001581号-3