Bagaimana cara menggunakan form_set_error () dengan cara yang benar?

8

Dalam modul Drupal 7 saya, saya memiliki formulir dan penangan validasinya. Saya memanggil formulir saya dari field.tpl.php dengan print render(drupal_get_form('my_form')); ini bekerja seperti yang diharapkan.

Masalahnya adalah dalam hal nilai input salah.

Dibutuhkan dua pengiriman yang salah sebelum menampilkan pesan kesalahan: Pertama kali, ada batas merah di sekitar input saya yang salah, dan yang kedua, pesan kesalahan ditampilkan (dengan batas merah).

Jadi, apa cara yang benar untuk digunakan form_set_error()?

druvik
sumber
Tidak ada drupal_set_error()fungsi. Apakah Anda yakin tidak bermaksud jahat form_set_error()?
kiamlaluno
Kamu benar! Maksud saya form_set_error ()! Saya mencoba memperbarui posting pertama.
druvik

Jawaban:

6

Pembangun formulir tidak seharusnya dipanggil di dalam file templat, karena mereka dipanggil terlambat. Saat Anda menelepon render(drupal_get_form('my_form')), kode yang membuat pesan kesalahan telah dieksekusi, dan pesan kesalahan akhirnya dilaporkan dari penangan validasi disimpan di sesi saat ini dari drupal_set_message () , yang dipanggil dari form_set_error().

Kode untuk mencetak pesan kesalahan ada di file page.tpl.php .

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

<?php print $messages; ?>

Kode drupal_set_message()yang menyimpan pesan untuk ditampilkan adalah kode berikut:

  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);
  }
kiamlaluno
sumber
Baik. Saya mengerti bahwa menggunakan form_set_error()file template adalah cara yang salah. Jadi, apa jalan yang benar?
druvik
1
drupal_get_form()seharusnya tidak dipanggil di dalam file template, tetapi di dalam modul.
kiamlaluno
Ok, saya telah memasukkannya ke dalam modul dan menggunakan Display Suite untuk menampilkannya di halaman saya. Terima kasih.
druvik
Anda harus menandai ini sebagai jawaban yang benar jika itu membantu Anda.
Malks
8

Anda seharusnya melihat form_set_error sebagai gantinya

jika Anda memiliki elemen seperti ini:

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

dalam fungsi panggilan balik validasi Anda lakukan ini jika Anda menemukan bahwa nilai-nilai dalam $form_state['values']tidak valid

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.');
}
LSU_JBob
sumber
Bahkan, itulah fungsi yang saya gunakan. (Saya memperbaiki kesalahan dari posting pertama saya).
druvik
1

form_set_error()harus dipanggil di dalam hook_validate()fungsi Anda seperti dijawab oleh LSU_JBob.

Amin
sumber
Penangan validasi bukan implementasi dari hook_validate().
kiamlaluno