Crear formulario de administración en Drupal 8

drupal 8

En este ejemplo vamos a crear un pequeño formulario de configuración en Drupal 8. Crearemos todo lo que necesitaremos, una página donde ver el formulario y el guardado de las variables. Para crear el formulario en Drupal 8 crearemos un modulo llamado modtest. 

La estructura de Drupal 8 recuerda algo a versiones anteriores, aunque como vemos cambia bastante. 

Fichero modtest.info.yml

name: Modtest
type: module
description: 'This is a test module'
version: '8.x-1.x-dev' core: '8.x'
project: 'modtest'
datestamp: 1444285775

Este archivo es el equivalente al .info de anteriores Drupal.

A continuación creamos una página donde crearemos una página en la que cargaremos nuestro formulario de ejemplo:

 

modtest.routing.yml:

 

TestForm_settings:
  path: 'admin/settings/testform'
  defaults:
    _form: 'Drupal\modtest\Form\TestForm'
    _title: 'The page tittle TestForm'
  requirements:
    _permission: 'administer site configuration'

 

Este fichero seria el equivalente al hook_menu. En el indicamos lo siguiente:

TestForm_settings: Creamos una nueva configuracion de página

path: 'admin/settings/testform': Indicamos el path de nuestra nueva página

_form: 'Drupal\modtest\Form\TestForm': Nombre completo de la clase de nuestro formulario

 _title: 'The page tittle TestForm': Titulo de la página

_permission: 'administer site configuration': Permiso que daremos a la página

En otro articulo se harán más páginas y se veran mas opciones.

 

Creamos el directorio src/Form que es donde crearemos nuestro fomulario

Dentro de este directorio creamos el fichero TestForm.php

TestForm.php

<?php

/**
 * @file
 * Contains Drupal\TestForm\Form\TestFormForm
 */

namespace Drupal\ModTest\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Implement a settings form
 */
class TestForm extends ConfigFormBase {

  /**
  * {@inheritdoc}
  */
  public function getFormId() {
    return 'TestForm_settings';
  }
    
  /**
  * {@inheritdoc}
  */
  public function getEditableConfigNames() {
    return ['TestForm.settings'];
  }

  /**
  * {@inheritdoc]
  */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $this->config('TestForm.settings')
      ->set('test', $form_state->getValue('test'))
      ->save();
    parent::submitForm($form, $form_state);
  }
  /**
  * {@inheritdoc}
  */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('TestForm.settings');
    $form['test'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('This is the test var'),
      '#default_value' => $config->get('test')
    );
    $form['actions']['#type'] = 'actions';
    $form['actions']['submit'] = array (
      '#type' => 'submit',
      '#value' => $this->t('Save'),
      '#button_type' => 'primary',
    );
    return parent::buildForm($form, $form_state);
  }
}


 

En este caso como es un formulario de configuración usamos las clases Drupal\Core\Form\ConfigFormBase Drupal\Core\Form\FormStateInterface

getFormId() Lo usamos para dar un id al formulario, esto nos servira por ejemplo para usarlo con formalter.

getEditableConfigNames() Lee el nombre de variable de configuración que sera editable.

submitForm(array &$form, FormStateInterface $form_state) En esta funcion incluiremos todas las funcionalidades del submit del form es igual que el form_submit de versiones anteriores.

buildForm(array $form, FormStateInterface $form_state) Creamos el formulario que deseamos. la estructura es similar a versines anteriores de drupal en el hook _form.

validateForm(array &$form, FormStateInterface $form_state) En esta incluiremos todas las funcionalidades para la validación de los datos del formulario.

 

El resultado es el siguiente:

FireShot Capture 3 - The page tittle_ - http___anise.cookingtheweb.com.local_admin_settings_testform.png

tweet: 

Comentarios

gracias

excelente post de gran ayuda ... muchas gracias :)

Gran ayuda TY!!

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.
By submitting this form, you accept the Mollom privacy policy.