¿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?

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.