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;
}
Commentaires
Salut,
Merci pour le coup de main !
J'essaye justement d'ajouter un bouton dans un custom block, avec l' action de créer automatiquement un contenu.
le bloc génère plusieurs items, et sous chaque item j'aimerai rajouter un bouton pour créer un contenu. Le contenu doit avoir des champs rempli en fonction de l'item sélectionné.
SI j'appelle dans ma fonction build un formulaire comment lui passer des variables en fonction de l'item sur lequel l'utilisateur clique??
Merci !
Ajouter un commentaire