Validasi khusus untuk formulir?


30

Saya perlu menambahkan validasi khusus ke formulir, mari kita katakan menambahkan formulir artikel.

Saya mengharapkan sesuatu hook_FORM_ID_validate()untuk menangani ini, tetapi tidak dapat menemukan sesuatu yang relevan dalam dokumentasi API.

Apa cara menambahkan validasi khusus ke formulir?

Jawaban:


57

Anda dapat menambahkan sejumlah fungsi validasi ke dalam bentuk apa pun hook_form_FORM_ID_alter()seperti:

function mymodule_form_article_node_form_alter(&$form, &$form_state, $form_id) {
  // There will already be some validate handlers added so you need to add to the
  // array rather than overwrite it.
  $form['#validate'][] = 'mymodule_article_form_validate';

  // As mentioned above you can add as many as you want
  $form['#validate'][] = 'mymodule_article_form_validate_2';
}

function mymodule_article_form_validate($form, &$form_state) {
  // Random example, if the title is 'test' throw an error
  if ($form_state['values']['title'] == 'test') {
    form_set_error('title', 'Title cannot be "test"');
  }
}

Misalkan saya telah menambahkan validasi formulir kustom ke formulir yang sudah memiliki 2 fungsi validasi. Lalu yang mana yang mendapatkan preferensi pertama di drupal 7?
Guru

Yang mana yang pertama dalam array @Guru
Clive

Jika bentuknya adalah user_registration_form, maka ia selalu menyimpan "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)". Misalkan saya akan menambahkan validasi khusus. Maka seharusnya seperti ini "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)". Tetapi saya ingin menjalankan fungsi "user_register_validate" pada awalnya.
Guru

Untuk bidang lain, Anda harus menggunakan:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy

cara mengatur validasi untuk ukuran, ekstensi dengan cara ini? Dan satu pertanyaan lagi, jika ada fungsi ajax seperti "unggah" dan "hapus" bagaimana kami menangani validasi untuk ini?
steniya

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.