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()?


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);
  }

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.');
}

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.


Penangan validasi bukan implementasi dari hook_validate().
— kiamlaluno
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.