¿Validación personalizada para un formulario?

30

Necesito agregar validación personalizada a un formulario, digamos agregar formulario de artículo.

Esperaba algo como hook_FORM_ID_validate()manejar esto, pero no puedo encontrar nada relevante en la documentación de la API.

¿Cuál es la forma de agregar validación personalizada a un formulario?

gilzero
fuente

Respuestas:

57

Puede agregar cualquier número de funciones de validación a cualquier formulario de la siguiente hook_form_FORM_ID_alter()manera:

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"');
  }
}
Clive
fuente
Supongamos que he agregado la validación de formulario personalizado a un formulario que ya tiene 2 funciones de validación. Entonces, ¿cuál es obtener la primera preferencia en drupal 7?
Guru
¿Cuál es el primero en la matriz @Guru
Clive
Si el formulario es user_registration_form, siempre mantiene "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)". Supongamos que voy a agregar una validación personalizada. Entonces debería ser así "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)". Pero quiero ejecutar la función "user_register_validate" al principio.
Guru
Para otros campos, debe usar:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy
¿Cómo configurar la validación de tamaño, extensión de esta manera? Y una pregunta más, si hay una funcionalidad ajax como "subir" y "eliminar", ¿cómo manejamos la validación para esto?
steniya
6

Debe usar hook_form_altery agregar su función a la #validatepropiedad.

Countzero
fuente