it-swarm.asia

كيف أستخدم form_set_error () بالطريقة الصحيحة؟

في الوحدة النمطية الخاصة بي Drupal 7 ، لدي نموذج ومعالجات التحقق الخاصة به. أتصل بنموذجي من field.tpl.php مع print render(drupal_get_form('my_form')) ؛ يعمل كما هو متوقع.

تكمن المشكلة في حالة وجود قيمة إدخال خاطئة.

يتطلب الأمر إرسالين غير صحيحين قبل عرض رسالة الخطأ: في المرة الأولى ، هناك حد أحمر حول إدخالي الخاطئ ، والمرة الثانية ، يتم عرض رسالة الخطأ (مع الحد الأحمر).

إذن ، ما هي الطريقة الصحيحة لاستخدام form_set_error()؟

8
druvik

لا يفترض أن يتم استدعاء منشئي النماذج داخل ملف قالب ، حيث يتم استدعاؤهم بعد فوات الأوان. عند استدعاء render(drupal_get_form('my_form')) ، تم تنفيذ الرمز الذي يعرض رسائل الخطأ ، ويتم حفظ رسائل الخطأ النهائية التي تم الإبلاغ عنها من معالج التحقق في الجلسة الحالية من drupal_set_message () والذي يتم استدعاؤه من form_set_error().

الرمز لطباعة رسالة الخطأ موجود في الملف page.tpl.php .

<?php if ($breadcrumb): ?>
  <div id="breadcrumb"><?php print $breadcrumb; ?></div>
<?php endif; ?>

<?php print $messages; ?>

الرمز الموجود في drupal_set_message() الذي يحفظ الرسائل المراد إظهارها هو الرمز التالي:

  if ($message) {
    if (!isset($_SESSION['messages'][$type])) {
      $_SESSION['messages'][$type] = array();
    }

    if ($repeat || !in_array($message, $_SESSION['messages'][$type])) {
      $_SESSION['messages'][$type][] = $message;
    }

    // Mark this page as being uncacheable.
    drupal_page_is_cacheable(FALSE);
  }
6
kiamlaluno

يجب أن تنظر إلى form_set_error بدلاً من ذلك

إذا كان لديك عنصر مثل هذا:

function my_custom_module_form() {
  $form = array();
  $form['my_element'] = array(
    '#type' => 'textfield',
    '#title' => 'My Text field',
    '#default_value' => 'Some default text.',
  );
  return $form;
}

في وظيفة رد الاتصال الخاصة بالتحقق من الصحة ، قم بذلك إذا وجدت أن القيم الموجودة في $form_state['values'] ليست صالحة

function my_custom_module_form_validate($form, &$form_state) {
  // Do some checking on $form_state['values'], if you don't like it.
  form_set_error('my_element', 'This is the error message that will be displayed.');
}
8
LSU_JBob

form_set_error() يجب أن يتم استدعاؤها داخل وظيفتك hook_validate() كما يرد عليها LSU_JBob.

1
Amin