Como criar um formulário no Drupal 8 via programação

Publicado em 13 de janeiro de 2016 às 13:08

Com a Orientação a Objetos no Drupal 8, alguns hooks deixaram de existir, tornando a vida do programador ainda mais fácil, como vamos ver ao criar um formulário via programação no Drupal 8.

O hook_form deixou de existir no Drupal 8. Dessa forma, basta estender a classe "FormBase" e implementar seu formulário.

Segue abaixo a estrutura do meu módulo custom:

custom-form-drupal-8-1.png

Dentro do arquivo "custom_form.info.yml", vamos deixar as informações do módulo:

 

name: Custom Form
type: module
description: 'Cria um formulário custom via programação'
package: Custom
core: 8.x

No arquivo "custom_form.routing.yml", vamos informar a url de acesso ao formulário, sua classe, título e regra de acesso:

custom_form:
  path: '/custom/form'
  defaults:
    _form: '\Drupal\custom_form\Form\CustomForm'
    _title: 'Custom Form'
  requirements:
    _permission: 'access content'

Em seguida, no arquivo "CustomForm.php", vamos implementar o formulário custom:

<?php
 
/**
 * @file
 * Contains \Drupal\custom_form\Form\CustomForm.
 */
 
namespace Drupal\custom_form\Form;
 
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
 
/**
 * Custom form example.
 */
class CustomForm extends FormBase {
 
  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'custom_form';
  }
 
  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $options = array('php' => 'PHP','js' => 'JavaScript');
 
    $form['custom_form']['label'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Name'),
      '#maxlength' => 64,
      '#required' => TRUE,
    );
 
    $form['custom_form']['description'] = array(
      '#type' => 'textarea',
      '#title' => t('Description'),
    );
 
    $form['custom_form']['select'] = array(
      '#title' => $this->t('Select Example'),
      '#type' => 'select',
      '#multiple' => FALSE,
      '#size' => 1,
      '#options' => $options,
    );
 
    $form['custom_form']['radios'] = array(
      '#type' => 'radios',
      '#title' => $this->t('Radios Example'),
      '#required' => TRUE,
      '#default_value' => 'php',
      '#options' => $options,
    );
 
    $form['custom_form']['save'] = array(
      '#type' => 'submit',
      '#value' => $this->t('Save'),
    );
 
    return $form;
  }
 
  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    if ($form_state->isValueEmpty('description')) {
      $form_state->setErrorByName('customFormEmpty', $this->t('Description is required'));
    }
  }
 
  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    //Your actions here!
    foreach ($form_state->getValues() as $key => $value) {
        drupal_set_message($key . ': ' . $value);
      }
    }
 
}

Feito isso, habilite o módulo e acesse a url "/custom/form" para ver o resultado final./

Até o próximo tutorial, galera!

 

Publicado originalmente em: http://www.drupalbrasil.com.br/como-criar-um-formulario-no-drupal-8-programacao