「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PRG パターンとフラッシュによるセッション処理

PRG パターンとフラッシュによるセッション処理

2024 年 8 月 5 日に公開
ブラウズ:368

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');



l
エラーが発生した場合、ユーザーはログイン ページに移動しますが、ユーザー w
にはエラーが表示されません。 次に、$_SESSION スーパーグローバル変数をフラッシュして、短時間後にセッションを破棄します。

return redirect ('/login');

$_SESSION['_flashed']['errors'] = $form->errors();

これで問題は解決したことがわかりますが、このコードをリファクタリングするには、クラス

に PRG メソッドを追加する必要があります。

セッションクラス(PRGパターン)


リファクタリングのために、ユーザー セッションを管理する Session クラスを含む Core/Session.php という名前の新しいファイルを作成します。

return redirect ('/login');

  • フラッシュ メソッドは、セッションのフラッシュに使用される $_SESSION['_flash'] 配列にデータを保存します。
  • get メソッドは、$_SESSION['_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');
    
    
    セッション::destroy();

    get メソッドのリファクタリング


    プロジェクトはすでに順調に進んでいます。ただし、Core/Session.php の get メソッドをリファクタリングして、コードを 1 つのステートメントに統合する必要があります:

    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