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:
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ó :)
masterultra
Bem observado Capi. Valeuuuu!