Form için özel doğrulama?


30

Bir forma özel doğrulama eklemem gerekiyor, yazalım makale formu ekleyelim.

Bunu hook_FORM_ID_validate()halletmek gibi bir şey bekliyordum , ancak API belgelerinde ilgili hiçbir şey bulamıyorum.

Bir forma özel doğrulama eklemenin yolu nedir?

Yanıtlar:


57

Herhangi bir forma istediğiniz hook_form_FORM_ID_alter()gibi herhangi bir sayıda doğrulama işlevi ekleyebilirsiniz :

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

Zaten 2 doğrulama fonksiyonu olan bir forma özel form doğrulama eklediğimi varsayalım. O zaman drupal 7'de ilk tercih hangisidir?
Guru

Şimdiye kadar @Guru dizisinde ilk olan
Clive

Form user_registration_form ise, her zaman "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)" tutar. Özel doğrulama ekleyeceğimi varsayalım. O zaman şöyle olmalı "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)". Ama önce "user_register_validate" işlevini çalıştırmak istiyorum.
Guru

Diğer alanlar için, şunları kullanmanız gerekir:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy

Bu şekilde, boyut, uzatma için doğrulama nasıl ayarlanır? Ve bir soru daha, eğer "upload" ve "remove" gibi bir ajax işlevi varsa bunun doğrulamasını nasıl ele alıyoruz?
steniya

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.