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

Posté le Jeudi 15 octobre 2020 - 12:00

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 :

  1. #dans la méthode build de mon bloc ou mon controleur :
  2. $build['#mon_formulaire'] = \Drupal::service('form_builder')->getForm(\Drupal\mon_module\Form\LoginForm::class);
  3. $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 :

  1. {# Dans le template twig : mon-template.html.twig #}
  2. {{ mon_formulaire }}

Évidement, il ne faut pas oublier d'avoir déclaré la variable mon_formulaire dans la déclaration du template :

  1. //mon_module.module
  2.  
  3. function mon_module_theme() {
  4. $themes = [];
  5. $themes['mon_template'] = [
  6. 'render element' => 'elements',
  7. 'variables' => [
  8. 'mon_formulaire' => [],
  9. ],
  10. 'template' => 'mon-template',
  11. ];
  12.  
  13. return $themes;
  14. }

 

Aller plus loin ?

 

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...