Drupal 8 & Drupal 9 - Afficher un formulaire dans un bloc ou un contrôleur

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;
}

 

Contenus en rapport

Drupal 8 - Views - Récupérer un formulaire exposé

Pour un besoin spécifique, il fallait que je récupère un formulaire exposé de views pour l'afficher ailleurs.

Il fallait en fait qu'à un endroit j'affiche les filtres exposés et à un autre le tri exposé.

J'ai donc créé un bloc, qui récupère ce formulaire, masque un champ.

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

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...