Validação personalizada para um formulário?


30

Eu preciso adicionar validação personalizada a um formulário, vamos dizer adicionar formulário de artigo.

Eu esperava algo como hook_FORM_ID_validate()lidar com isso, mas não consigo encontrar nada relevante na documentação da API.

Qual é a maneira de adicionar validação personalizada a um formulário?

Respostas:


57

Você pode adicionar qualquer número de funções de validação a qualquer formulário da seguinte hook_form_FORM_ID_alter()maneira:

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

Suponha que eu tenha adicionado validação de formulário personalizado a um formulário que já possui 2 funções de validação. Então qual é a primeira preferência no drupal 7?
Guru

O que é primeiro na matriz @Guru
Clive

Se o formulário for user_registration_form, ele sempre manterá "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)". Suponha que eu vou adicionar validação personalizada. Então deve ser assim "[#validate] => Matriz ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)". Mas eu quero executar a função "user_register_validate" primeiro.
Guru

Para outros campos, você deve usar:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy

como definir validação para tamanho, extensão dessa maneira? E mais uma pergunta, se houver funcionalidade ajax como "upload" e "remove", como lidamos com a validação para isso?
steniya

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.