以前のプロジェクトでは、検証が失敗したときに 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();
これで問題は解決したことがわかりますが、このコードをリファクタリングするには、クラス
リファクタリングのために、ユーザー セッションを管理する Session クラスを含む Core/Session.php という名前の新しいファイルを作成します。
return redirect ('/login');
この Session クラスを使用すると、PRG パターンとセッション フラッシュを実装してユーザー セッションを管理し、フォームの重複送信や不要なエラー メッセージの永続化を防ぐことができます。
このファイルでは、 has メソッドはセッションにキーが存在するかどうかを示すブール値を返します:
return redirect ('/login');。 パブリック静的関数 has($key) { return (bool) static::get($key); }
function.php ファイルで、Session クラスを使用するようにログアウト関数をリファクタリングします。
return redirect ('/login');セッション::destroy();
プロジェクトはすでに順調に進んでいます。ただし、Core/Session.php の get メソッドをリファクタリングして、コードを 1 つのステートメントに統合する必要があります:
return redirect ('/login');パブリック静的関数 get($key, $default = null) { $_SESSION['_flash'][$key] を返す ?? $_SESSION[$key] ?? $デフォルト; }
今日のプロジェクトでは、見た目を良くし、理解しやすくし、コードのパフォーマンスを向上させるために、多くのリファクタリングが行われました。
しっかりと理解していただけたと思います。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3