"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > التعامل مع الجلسة باستخدام نمط PRG والوميض

التعامل مع الجلسة باستخدام نمط PRG والوميض

تم النشر بتاريخ 2024-08-05
تصفح:528

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 redirect ('/login');

إعادة التوجيه ('/تسجيل الدخول');



ل
ينقل المستخدم إلى صفحة تسجيل الدخول في حالة حدوث أي خطأ ولكنه لا يظهر الخطأ للمستخدم w
نقوم بعد ذلك بوميض المتغير العالمي $_SESSION لتدمير الجلسة بعد وقت قصير:

return redirect ('/login');

$_SESSION['_flashed']['أخطاء'] = $form->errors();

الآن يمكنك ملاحظة أن المشكلة قد تم حلها ولكن لإعادة صياغة هذا الكود علينا إضافة طريقة PRG في الفصل

فئة الجلسة (نمط PRG)


لإعادة البناء، نقوم بإنشاء ملف جديد باسم Core/Session.php يحتوي على فئة الجلسة التي تدير جلسات المستخدم:

return redirect ('/login');

  • تقوم طريقة الفلاش بتخزين البيانات في مصفوفة $_SESSION['_flash']، والتي تُستخدم في وميض الجلسة.
  • تتحقق طريقة get مما إذا كانت هناك بيانات تومض في $_SESSION['_flash'] وترجعها. إذا لم يكن الأمر كذلك، فإنه يقوم بإرجاع بيانات الجلسة العادية أو القيمة الافتراضية.
  • تقوم طريقة إلغاء الفلاش بإلغاء ضبط البيانات التي تومض، مما يجعلها متاحة فقط للطلب التالي.
  • يتم تنفيذ نمط PRG عن طريق تخزين البيانات في الجلسة باستخدام طريقة put، وإعادة التوجيه (على سبيل المثال، باستخدام return redirect('/login');)، ثم استرجاع البيانات في الطلب التالي باستخدام طريقة get.

    باستخدام فئة الجلسة هذه، يمكننا تنفيذ نمط 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; }

    تم إجراء الكثير من عمليات إعادة البناء في مشروعنا اليوم لجعله أفضل في الشكل وسهل الفهم ولزيادة أداء الكود.

    أتمنى أن تكون قد فهمت الأمر بوضوح!.

    بيان الافراج تم إعادة إنتاج هذه المقالة على: 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