Cómo crear un formulario en drupal 8 e insertarlo en un bloque o una página

En este artículo os voy a enseñar como crear un formulario en drupal 8 para usarlo donde queramos, no crear una página que muestre un formulario y no podamos meterle mano, es muy diferente.

Podemos definir un formulario en drupal 8 y luego insertarlo donde queramos, en una página o un bloque. Esto es muy sencillo, en este artículo os voy a mostrar como se desarrollan los formularios en drupal 8 para posteriormente insertarlos en nuestro código, ya bien sea un bloque o una página.

Definir un formulario en Drupal 8

Para crear nuestros formularios tenemos que crear una clase en nuestro módulo, ver como crear un módulo en drupal 8, esta clase la crearemos en src/Form y extenderá de FormBase. Aquí os dejo el código.

Aquí os dejo el enlace a la api de Drupal 8 Form. En esta clase tenemos 4 funciones, en las que definimos el id del formulario, los campos que tendrá, las posibles validaciones y el submit. Con esto tenemos un formulario creado en drupal 8. Pero no sirve de nada si no lo mostramos, vamos a ello.

Insertar un formulario en una página de drupal 8 desde el archivo mi_modulo.routing.yml (No recomendado)

Ahora vamos a insertar este formulario en una página en drupal 8 desde nuestro archivo mi_modulo.routing.yml. Esto es una manera muy mala de hacerlo Es una buena práctica pero perdemos el poder del controlador, lo único que enviaremos será el formulario, no tendremos acceso a nada más.

De esta manera definimos una ruta y le indicamos el form. Listo, con esto ya mostramos un formulario en una página.

Si lo que necesitas es mostrar una página con un formulario sin más este es tu método, si por el contrario quieres tener mas control en esa página y poder maquetar a tu antojo hay otras maneras que os mostraré en el siguiente punto.

Insertar un formulario en una página de drupal 8 desde el controlador (manera Pro)

Antes de hacer esto deberías saber como crear una página en drupal 8 te lo recomiendo, pero si creas que puedes seguir el nivel no hace falta, en este artículo tienes todo lo necesario para crear tu formulario en una página.

La mejor manera de insertar un formulario desde el controlador es con la función estática formBuilder() de Drupal, de esta manera usamos la función getForm() y mandamos el formulario a nuestra vista como una variable. este es nuestro controlador.

Con esto hemos mandado el formulario como una variable, ya solo tenemos que recibirlo en nuestro template y mostrarlo al mundo. Para ello creamos nuestro template, pero antes hay que definir los theme del módulo en nuestro archivo mi_modulo.module, pone este código en el.

Aquí le decimos cual va ha ser el template encargado de mostrar la pagina_insertar_gasto definida en nuestro controller, vamos ha crear el archivo pagina-insertar-gasto.html-twig

De esta manera tenemos acceso a colocar el form como queramos, manejar sus atributos y modificarlo si fuera necesario antes de enviar al template desde el controlador, ya vosotros mismos si veis el potencial de programar de esta manera o no…

Insertar un formulario en un bloque en drupal 8

Ahora para rematar el artículo y enseñaros el potencial de drupal en su parte de framework vamos a usar el mismo formulario y lo vamos a insertar en un bloque, primero mira como se crean los bloques en drupal 8.

Vamos a crear nuestro bloque, coger nuestro formulario, modificar lo que queramos y mandarlo a la vista. Mirar el siguiente código.

A ver que hemos hecho aquí, hemos creado un bloque, hemos cogido nuestro formulario con formBuilder y hemos modificado algunos datos. hecho esto lo hemos enviado a nuestro template. Una cosa muy importante en los bloques con variables dinámicas es la cache, si los datos que van a mostrar nuestro bloque van ha ser cambiantes, hay que decirle a drupal que la cache sea 0, para que cuando el usuario llame otra vez al bloque vuelva a recostruir el código.

Y ahora solo nos quedaría mostrarlo al usuario, para ello vamos a crear nuestro template, para ello volvemos a nuestro mi_modulo.module a decirle que tenemos un nuevo template.

Y creamos nuestro template para nuestro bloque, aquí hacerlo como queráis.

Buenos con este artículo hemos aprendido a crear formularios, cogerlos, modificarlos y enviarlos a nuestro template como una variable, ¿Qué os parece?

About ignacio Farré

Técnico en programación web, amigo de MVC y experto en Drupal, Symfony, Prestashop y bootstrap.

Check Also

Como crear una página en drupal 8 y maquetar en un theme

Crear una página en Drupal 8 y maquetar en un template

Es muy fácil crear una página en drupal 8, pero lo interesante es poder maquetarla …

programar un bloque con drupal

Crear un bloque en drupal 8 y maquetar en un theme

Os voy a mostrar como crear un bloque en drupal 8 y lo mas importante, …

Theme_preprocess_hook

Acceder a los datos del usuario en drupal 8 y a su imagen – Clases File, Node y User

Acceder a los datos del usuario en drupal 8 es muy fácil, en este artículo …

  • Bernardo “Dick Grayson” Figuer

    Buenas Tardes, Disculpa tengo una duda como se realizaria la llamada del controller? tengo que crear o definir la ruta en el routing o como se realizaria

    • http://ignaciofarre.com ignacio farre fuentes

      buenas tardes Bernardo, disculpa la tardanza, no vi el comentario.
      En este artículo explico como crear un formulario, para insertarlo en un bloque o una página. mira estos artículos si quieres saber como crear una página en drupal 8 o bien mira como crear un bloque en drupal 8.

  • reyna cortez

    No entendi bien , como agregar un formulario en un bloque

  • reyna cortez

    segui todos los pasos,pero no me funciono :(

  • reyna cortez

    En el archivo InsertarGastoFormBlock.php, puse en
    ‘#theme’ => ‘mi_modulo’
    y me funciono muy bien así, porque si le ponía esta linea
    ‘#theme’ => ‘bloque_insertar_gasto’ …. no me funcionaba

    • http://ignaciofarre.com ignacio farre fuentes

      El mismo problema que arriba, como llames a tu theme en tu bloque debes definirlo en tu hook_theme, no conozco el motivo de que no funcionara con otro tipo de nombre, prueba con otro nombre.
      Saludos :)

  • reyna cortez

    Tambien cambie en el archivo mi_modulo.module
    return [
    ‘bloque_insertar_gasto’ => [
    ‘variables’ => [
    ‘title’ => ‘Default title’,
    ‘description’ => NULL,
    ‘formulario’ => NULL
    ],
    ‘template’ => ‘bloque-insertar-gasto’],

    por este:

    return [
    ‘mi_modulo’ => [
    ‘variables’ => [
    ‘titulo’ => ‘Default title’,
    ‘descripcion’ => ‘descripción por defecto’,
    ‘formulario’ => NULL ],
    ‘template’ => ‘bloque-insertar-gasto’
    ],

    • http://ignaciofarre.com ignacio farre fuentes

      Realmente has cambiado el nombre de tu bloque… deberías ponerle uno más representativo.