You are here

Cómo no enviar campos de un formulario en Drupal 8

isholgueras's picture
Submitted by isholgueras on Sun, 05/15/2016 - 22:34

El array de un formulario en Drupal 8 es un listado de campos y propiedades (empiezan con #). 

Si tenemos un formulario, por ejemplo node/add, con muchos campos pero sólo queremos enviar unos pocos al usuario, ¿cuál es la mejor forma de hacerlo?

Lo más intuitivo sería hacer un "unset" a cada uno de los campos que no queramos enviar, pero eso nos daría un error de validación cuando el usuario envíe el formulario, además de que lo hacemos inestable. No podemos hacer un unset bajo ningún concepto.

Tenemos 2 opciones:

  1. Convertir el campo a type="hidden". No es la forma más elegante, pero puede ser una solución válida para algunos casos concretos, pero no la mejor.
  2. Indicándole a drupal que no hay acceso al campo con '#access' => FALSE en el array del campo del formulario. Esta es sin duda la mejor solución y la más estable.

En el siguiente código sólo enviaría el campo title, pero no internal_status:

    $form['title'] = [
      '#type' => 'textfield',
      '#description' => $this->t("Short title"),
      '#title' => $this->t("Title"),
    ];

    $form['internal_status'] = [
      '#type' => 'textarea',
      '#description' => $this->t("This field wont be sent."),
      '#title' => $this->t("Internal status"),
      '#access' => FALSE,
    ];

Se podría incluso hacer una lógica para mostrar algunos campos según qué roles o qué permisos queramos dar.

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.