Convalida personalizzata per un modulo?


30

Devo aggiungere la convalida personalizzata a un modulo, diciamo aggiungere il modulo articolo.

Mi aspettavo qualcosa di simile hook_FORM_ID_validate()per gestirlo, ma non riesco a trovare nulla di rilevante nella documentazione dell'API.

Qual è il modo per aggiungere la convalida personalizzata a un modulo?

Risposte:


57

È possibile aggiungere un numero qualsiasi di funzioni di convalida a qualsiasi modulo in questo hook_form_FORM_ID_alter()modo:

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

Supponiamo di aver aggiunto la convalida del modulo personalizzato a un modulo che ha già 2 funzioni di convalida. Quindi qual è la prima preferenza in drupal 7?
Guru

Qualunque sia il primo nella matrice @Guru
Clive

Se il modulo è user_registration_form, mantiene sempre "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)". Supponiamo che aggiungerò una convalida personalizzata. Quindi dovrebbe essere così "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)". Ma all'inizio voglio eseguire la funzione "user_register_validate".
Guru,

Per altri campi, devi usare:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy il

come impostare la validazione per dimensione, estensione in questo modo? E un'altra domanda, se esiste una funzionalità Ajax come "upload" e "remove" come gestiamo la validazione per questo?
steniya,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.