Drupal - Utiliser l'injection de dépendance dans un formulaire

Via la commande drush generate form:simple, il est très facile de générer le squelette pour un formulaire, avec une route liée. 

Mais ce générateur, contrairement à d'autre ne demande pas si l'on a besoin d'injecter des services dans notre formulaire.

Heureusement, c'est plutôt simple : 

Il faut commencer par ajouter la classe ContainerInterface à vos use :

use Symfony\Component\DependencyInjection\ContainerInterface;

Puis de définir le constructeur :

  /**
   * Constructs the form instance.
   */
  public function __construct(protected EntityTypeManagerInterface $entityTypeManager) {}

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container): self {
    return new self($container->get('entity_type.manager'));
  }

 Avec « l'ancienne syntaxe » PHP, cela donne : 

  protected EntityTypeManagerInterface $entityTypeManager;

  /**
   * Constructs the form instance.
   */
  public function __construct(EntityTypeManagerInterface $entityTypeManager) {
    $this->entityTypeManager = $entityTypeManager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container): self {
    return new self($container->get('entity_type.manager'));
  }

Ajouter un commentaire

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