في مشروعنا السابق، لم يكن إرجاع طريقة عرض مباشرة من طلب POST عند فشل التحقق من الصحة هو الأسلوب الأفضل.
عندما يرسل المستخدم نموذج تسجيل دخول يحتوي على بيانات غير صالحة، يعرض النموذج رسائل خطأ ويعيد توجيه المستخدم إلى صفحة تسجيل الدخول. ومع ذلك، إذا قام المستخدم بتحديث الصفحة أو انتقل بعيدًا وعاد إلى صفحة تسجيل الدخول، فستظل رسائل الخطأ نفسها قائمة.
لحل هذه المشكلة، يمكننا استخدام الجلسات لتخزين الأخطاء وتنفيذ نمط PRG. يمكننا تخزين الأخطاء في المتغير العالمي $_SESSION وتحديث بيان الأخطاء في create.php على النحو التالي:
$_SESSION['errors'] = $form->errors(); view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);?? [] ]);
ولكن حتى مع هذا التغيير، لا تزال المشكلة قائمة. لحل هذه المشكلة علينا تغيير بيان الإرجاع كـ:
return redirect ('/login');إعادة التوجيه ('/تسجيل الدخول');
ل
ينقل المستخدم إلى صفحة تسجيل الدخول في حالة حدوث أي خطأ ولكنه لا يظهر الخطأ للمستخدم w
نقوم بعد ذلك بوميض المتغير العالمي $_SESSION لتدمير الجلسة بعد وقت قصير:
return redirect ('/login');$_SESSION['_flashed']['أخطاء'] = $form->errors();
الآن يمكنك ملاحظة أن المشكلة قد تم حلها ولكن لإعادة صياغة هذا الكود علينا إضافة طريقة PRG في الفصل
لإعادة البناء، نقوم بإنشاء ملف جديد باسم Core/Session.php يحتوي على فئة الجلسة التي تدير جلسات المستخدم:
return redirect ('/login');
باستخدام فئة الجلسة هذه، يمكننا تنفيذ نمط PRG ووميض الجلسة لإدارة جلسات المستخدم ومنع عمليات إرسال النماذج المكررة واستمرار رسائل الخطأ غير المرغوب فيها.
في هذا الملف، تقوم طريقة has بإرجاع قيمة منطقية تشير إلى ما إذا كان هناك مفتاح موجود في الجلسة:
return redirect ('/login');. وظيفة ثابتة عامة لها(مفتاح $) { العودة (منطقي) ثابت::get($key); }
في ملف function.php، نقوم بإعادة هيكلة وظيفة تسجيل الخروج لاستخدام فئة الجلسة:
return redirect ('/login');جلسة::تدمير();
حيث أن المشروع يعمل بشكل جيد بالفعل. لكننا نحتاج إلى إعادة بناء طريقة get في Core/Session.php لدمج الكود في عبارة واحدة:
return redirect ('/login');الوظيفة الثابتة العامة get($key, $default = null) { إرجاع $_SESSION['_flash'][$key] ؟؟ $_SESSION[$key] ؟؟ $default; }
تم إجراء الكثير من عمليات إعادة البناء في مشروعنا اليوم لجعله أفضل في الشكل وسهل الفهم ولزيادة أداء الكود.
أتمنى أن تكون قد فهمت الأمر بوضوح!.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3