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.