Crear formularios en Drupal 8

En este tutorial veremos como crear formularios en Drupal 8 dentro de un módulo que estemos desarrollado.

Para crear formularios en Drupal 8 dentro de nuestro módulo crearemos el fichero pruebas_module/src/Form/CrearEmpresaForm.php y aquí definimos la clase del formulario y la definición de los diferentes campos.

<?php
namespace Drupal\pruebas_module\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Component\Utility\UrlHelper;


class CrearEmpresaForm extends FormBase {

    /**
     * {@inheritdoc}
     */
    public function getFormId() {
        // Nombre del formulario
        return 'crear_empresa_form';
    }

    /**
     * {@inheritdoc}
     */
    public function buildForm(array $form, FormStateInterface $form_state) {
	
       // Definimos los campos
        $form['web'] = [
            '#type'     => 'textfield',
            '#title'    => $this->t('Sitio web'),
            '#required' => TRUE,
        ];
		
        $form['location'] = [
            '#type'     => 'text_format',
            '#title'    => $this->t('Dirección'),
            '#required' => TRUE,
        ];
       
        $form['submit'] = [
            '#type'  => 'submit',
            '#value' => $this->t('Crear empresa'),
        ];
        return $form;
    }

    /**
     * {@inheritdoc}
     */
    public function validateForm(array &$form, FormStateInterface $form_state) {

        // Hacemos las validaciones necesarias
        if (empty($form_state->getValue('web'))) {
            $form_state->setErrorByName('web', $this->t('Es necesario introducir un sitio web'));
        }
    }

    /**
     * {@inheritdoc}
     */
    public function submitForm(array &$form, FormStateInterface $form_state) {

        // Mostrar resultados al enviar el formulario en un mensaje de drupal
        foreach ($form_state->getValues() as $key => $value) {
            drupal_set_message($key . ': ' . $value);
        }
    }
}

Listado de elementos y tipos de campo disponibles para crear formularios en Drupal 8: https://api.drupal.org/api/drupal/elements

Ahora en nuestro controllador pruebas_module/src/Controller/PruebasController.php añadiremos una acción que cargará el formulario en una vista y posteriormente definiermos una ruta para tener una nueva página con un formulario disponible.

<?php
namespace Drupal\pruebas_module\Controller;

use Drupal;
use Drupal\node\Entity\Node;
use Drupal\Core\Controller\ControllerBase;

class PruebasController extends ControllerBase {
	
  public function content() {
    return array(
        '#type' => 'markup',
        '#markup' => $this->t('Hola mundo !!'),
    );
  }
  
    public function crearEmpresa() {
// Utilizamos el formulario
        $form = $this->formBuilder()->getForm('Drupal\pruebas_module\Form\CrearEmpresaForm');
        
// Le pasamos el formulario y demás a la vista (tema configurado en el module)
        return [
            '#theme' => 'crear_empresa',
            '#titulo' => $this->t('Formulario crear empresa'),
            '#descripcion' => 'Formulario para crear una nueva empresa en Drupal 8',
            '#formulario' => $form
        ];
    }
  
}

?>

Ahora vamos a crear el fichero de la vista pruebas_module/templates/crear_empresa.html.twig en el que simplemente imprimimos el contenido de la variable formulario.

<div class="row">
    
    <div class="col-md-6">
        <h2>{{ titulo }}</h2>
        <p>{{ descripcion }}</p>
    </div>
    
    <div class="col-md-6">
        {{ formulario }}
    </div>
    
</div>

Añadimos la vista que estamos usando al theme hook del pruebas_module.module

<?php
/**
 * Theme hook
 */
function pruebas_module_theme($existing, $type, $theme, $path) {
    
    return array(
        'crear_empresa' => array(
                                'variables' => array(
                                    'titulo' => 'Título por defecto', 
                                    'descripcion' => 'descripción por defecto',
                                    'formulario'   => NULL
                                    ),
                                'template' => 'crear_empresa'
                            )
    );
}

Definimos nuestras rutas en el fichero pruebas_module/pruebas_module.routing.yml

pruebas_module.content:
    path: '/admin/config/modulo-de-pruebas'
    defaults:
        _controller: '\Drupal\pruebas_module\Controller\PruebasController::content'
        _title: 'Modulo de pruebas'
    requirements:
        _permission: 'access content'
        
pruebas_module.crear_empresa:
    path: '/admin/config/crear-empresa'
    defaults:
        _controller: '\Drupal\pruebas_module\Controller\PruebasController::crearEmpresa'
        _title: 'Modulo de pruebas - Crear nueva empresa'
    requirements:
        _permission: 'access content'

Con esto ya hemos visto como crear formularios en Drupal 8.

Más información:
Crear un módulo básico en Drupal 8
Listado de hooks de Drupal 8
Curso de Symfony3 – Domina el framework PHP más completo

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post