Il est possible dans un contrôleur ou un bloc de récupérer un formulaire et de l'afficher comme n'importe quelle autre variable.
À l'époque de drupal 7 on utilisait la fonction drupal_get_form(), à partir de drupal 8, il faut utiliser le service form_builder et sa méthode getForm() en lui passant la classe du formulaire :
#dans la méthode build de mon bloc ou mon controleur :
$build['#mon_formulaire'] = \Drupal::service('form_builder')->getForm(\Drupal\mon_module\Form\LoginForm::class);
$build['#theme'] = 'mon_template';
Note : il est toujours préférable d'injecter le service en utilisant l'injection de dépendance.
Ensuite il sera possible d'afficher le formulaire dans le template via la variable mon_formulaire :
{# Dans le template twig : mon-template.html.twig #}
{{ mon_formulaire }}
Évidement, il ne faut pas oublier d'avoir déclaré la variable mon_formulaire dans la déclaration du template :
//mon_module.module
function mon_module_theme() {
$themes = [];
$themes['mon_template'] = [
'render element' => 'elements',
'variables' => [
'mon_formulaire' => [],
],
'template' => 'mon-template',
];
return $themes;
}
Ajouter un commentaire