Criando um formulário personalizado

Uma das grande dificuldades de todo desenvolvedor que começa a trabalhar com Drupal, é saber como montar o seu próprio formulário, validar e enviar suas informações.

Nesse artigo vou ensinar como criar um formulário em Drupal 7 com os seguintes campos:

  • Nome
  • Data de nascimento
  • Senha
  • Confirmação de senha
  • Newsletter

Vamos criar um novo módulo chamado "custom" e vamos criar um item de menu utilizando o hook_menu().

/**
  * Implements hook_menu().
  */
function custom_menu() {
  $items = array();
  $items['demo/forms'] = array(
    'title' => 'Criando formulários customizados',
    'description' => 'Criando formulários customizados',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('_custom_criando_formulario_personalizado'),
    'access arguments' => array('access content')
  );	
  return $items;
}

Como estamos trabalhando com formulários vamos utilizar a função "drupal_get_form" como page callback e o nome da função que usaremos para montar o formulário como argumento.

Agora utilizaremos a Form API Reference para criar nossos itens:

function _custom_criando_formulario_personalizado() {
 
  $form = array();
 
  $form['nome'] = array(
    '#type' => 'textfield',
    '#title' => 'Nome Completo',
    '#required' => true
  );
 
  $form['nascimento'] = array(
    '#type' => 'date',
    '#title' => 'Data de Nascimento',
    '#required' => true
  );
 
  $form['senha'] = array(
    '#type' => 'password_confirm',
    '#required' => true
  );
 
  $form['newsletter'] = array(
    '#type' => 'checkbox',
    '#title' => 'Desejo receber informações sobre o site',
    '#required' => true
  );
 
  $form['enviar'] = array(
    '#type' => 'submit',
    '#value' => 'Enviar',
    '#required' => true
  );
 
  return $form;
}

O resultado final ficará assim:

Criando um formulário personalizado em Drupal 7

Por padrão o Drupal ja faz a validação em cada item que possua #required => true.

Para criar a sua própria validação utilize hook_validate, onde hook deverá ser substituído pela nome da sua função:

function _custom_criando_formulario_personalizado_validate($form, &$form_state) {
  if ($form_state['values']['nome'] == 'aaa') {
    form_set_error('nome', t('Esse nome é inválido.'));
  }
}

A função form_set_error(), serve para interromper o envio dos dados e apresentar uma mensagem de erro ao usuário.

Para recuperar os valores utilize hook_submit. O valor de cada campo fica em $form_state['values']['NOME_DO_CAMPO'].

function _custom_criando_formulario_personalizado_submit($form, &$form_state) {
  var_dump($form_state['values']);
}

Comentários

Capi Etheriel

A função form_set_error é bem interessante porque ele marca qual item do formulário deu erro. É importante lembrar que se seu formulário tem várias validações, ele vai rodar *TODAS* as validações mesmo que alguma dê erro. Isso permite que o usuário seja informado de todos os erros no form, de uma vez só :)

migueltrindade

Bem observado Capi. Valeuuuu!