ما هو الأسلوب الجيد للتعامل مع رموز التحقق المتكررة والطويلة؟

StackOverflow https://stackoverflow.com/questions/1419619

  •  07-07-2019
  •  | 
  •  

سؤال

لقد بدأت برمجة الويب مؤخرًا فقط وأنا مندهش جدًا أنه على الرغم من أنني أستخدم مكتبة التحقق من الصحة، إلا أنني لا أزال أحصل على 20-30 سطرًا من التعليمات البرمجية للتحقق من الصحة وحده، دون احتساب رسائل الخطأ ووظائف رد الاتصال.أنا أستخدم إطار عمل Kohana MVC وكنت أتساءل عما إذا كان هناك أي طريقة يمكنني من خلالها تقصير رموز التحقق الخاصة بي.حاولت أن أفكر في ما يلي

  1. وضع رموز التحقق من الصحة في النموذج الخاص بي (وهو أمر متاح تمامًا لمبتدئ مثلي).
  2. إنشاء مكتبة صغيرة جدًا للتحقق من صحة الإدخالات (شيء يرتبط بفئة التحقق من الصحة، مما يسمح لي بالاتصال بالمكتبة لإجراءات متكررة مثل تسجيل المستخدم والتحرير والأشياء)

أم أن هناك طرق أفضل وأكثر فعالية؟

هل كانت مفيدة؟

المحلول

أوصي بشدة بالعمل على تضمين التحقق من الصحة في النموذج.بمجرد أن تتمكن من القيام بذلك، فإن أي عمليات أخرى تقوم بإنشائها ستكون أسهل بكثير.بالإضافة إلى ذلك، إذا كان لديك عدة وحدات تحكم تحاول حفظ تلك البيانات، فلن تحتاج إلى إعادة ترميز التحقق من الصحة.تحتوي مستندات Kohana على بعض الأمثلة لدمج مكتبة التحقق من الصحة وORM، ويجب أن تبدأ من هناك.

نصائح أخرى

أستخدم Zend_Validate مع Zend_Forms للتحقق من الصحة حيث يوجد رمز التحقق في طريقة init للنماذج.كل ما علي فعله هو تمرير مجموعة من أدوات التحقق لكل عنصر ثم التشغيل ..

$form->isValid($data);

...خارج النموذج للتحقق من صحة البيانات.

تتكون مصفوفة التحقق بسهولة من أكثر من 30 سطرًا لأنني أفصل كل إدخال في المصفوفة بسطر جديد.ولكن أعتقد أنه سيكون لديك ذلك إذا قمت بتحديد قواعد التحقق الدقيقة لكل عنصر بشكل صحيح.

ومن السهل حقًا تحديد أدوات التحقق الجديدة في Zend.

يحرر:لقد اكتشفت إطارًا يعمل على توسيع إطار عمل Zend والذي يسمح لكائنات المجال باحتواء التحقق من الصحة الخاص بها.إنه يسمى إطار عمل Xyster ولكني لم أتمكن من تشغيله من المحاولة الأولى لذلك لم أحاول بعد ذلك.

هذه هي إستراتيجيتي للتعامل مع رمز التحقق.أفترض أن "مكتبة التحقق من الصحة" تعني تلك التي تتأكد فقط من أن البريد الإلكتروني هو بريد إلكتروني، وأن أرقام الهاتف رقمية، وليست قواعد عمل بطبيعتها.

تتمثل الفكرة في جعل كل كود قاعدة عمل بمثابة عامل وظيفي - إذا كان PHP، فيمكنك الحصول عليه بمجرد استخدام سلسلة لتعريف الوظيفة؛بالنسبة للغات الأخرى، قد تضطر إلى استخدام نمط الإستراتيجية.حدد واجهة للعامل (ليست ضرورية لـ PHP) وقم بتفريغها في مصفوفة.

قم بتشغيل المصفوفة التي ستعيد النجاح والخطأ ورمز الخطأ إلى المخزن المؤقت.في النهاية، افحص المخزن المؤقت للأخطاء وحدد عملية التحقق التي فشلت.استخدامه لتخصيص العرض.

هنا مثال

$checkUniqueUserName = new CheckUniqueUserName();
$checkEmailNotUsed = new EmailNotUsed();
$validator = array();
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName;
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed;

$results = array();

foreach ($validator as $v)
{

  $result[$v->getValidatorName()] = $v->execute($userInfo);
}

class CheckUniqueUserName()
{

   public function execute($userInfo)
   {
       // SQL blah blah blah

      if ($bNameUnique)
        return array ('success' => 1)
      else
        return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name);

   }

}

في النهاية، سيكون لديك مصفوفة نتائج، كل منها مملوء بعملية التحقق من الصحة، وستعرف أيها فشل وأيها لم ينجح.ويمكن بعد ذلك تمرير هذا إلى جانب العميل لمزيد من المعالجة، مثل تمييز الحقول الفاشلة.يمكن استخدام رمز_الخطأ للبحث عن رسالة الخطأ المناسبة والتنسيق المطبق عليها.

لست متأكدًا حقًا مما تقصده بمعاودة الاتصال بالرغم من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top