Una de las nuevas cosas que trae el API de Drupal 8 es un cambio completo a toda la generación de formularios junto con los nuevos render_array.
En Drupal 7, para obtener un formulario custom simplemente había que hacer:
$form = drupal_get_form("form_id", $args);
En Drupal 8 la cosa cambia bastante. Distingamos dos tipos de formulario, los customizados y los de entidad
Para obtener el array form de un formulario customizado se haría:
$form = \Drupal::formBuilder()->getForm(\Drupal\my_module\Form\MyCustomForm::class);
Si lo que deseas es obtener el formulario de creación/edición de una entidad ya no utilizamos el form builder, utilizamos el entityTypeManager para obtener el formulario que enviarle al formBuilder. Veamos dos ejemplos:
$values = ['type' => "article"]; // Obtengo el formulario de creación $node_add = \Drupal::entityTypeManager() ->getStorage('node') ->create($values);
//Obtendo el formulario de edición del nodo 145 $node_145 = \Drupal::entityTypeManager() ->getStorage('node') ->load(145);
Cuando ya tengamos el nodo o entidad disponible, utilizamos el propio objeto de entityTypeManager para obtener el formulario.
$form = \Drupal::entityTypeManager() ->getFormObject('node', 'default') ->setEntity($node);
Este objeto $form, ya es el objeto formulario que necesita el formBuilder para renderizar el formulario. Para ello simplemente llamamos a lo que hemos llamado al principio con el formulario custom y ya tendremos nuestro formulario renderizado:
$rendered_form = \Drupal::formBuilder()->getForm($form);
Está claro que el cambio de pensamiento de Drupal 7 a Drupal 8 es muy grande, pero una vez que vas entrando poco a poco vas viendo mucha lógica y mucha razón a tal y como está planteado Drupal 8.
Add new comment