Drupal 8 - Surcharger la classe de formulaire d'un nœud

Posté le Jeudi 4 juillet 2019 - 10:17
Dernière mise à jour le Jeudi 4 juillet 2019 - 11:36

Pour modifier le formulaire de création d'un nœud sous drupal 8, on peut utiliser le bon vieux HOOK_form_alter(), mais on peut aussi faire quelque chose de plus « propre » en altérant le type d'entité pour redéfinir son formulaire.

Cela se passe en deux étapes.

1 - Altération du type d'entité

  1. # mon_module.module
  2. function mon_module_entity_type_alter(array &$entity_types) {
  3. $entity_types['node']->setFormClass('default', \Drupal\mon_module\Entity\Form\NodeCustomForm::class);
  4. $entity_types['node']->setFormClass('edit', \Drupal\mon_module\Entity\Form\NodeCustomForm::class);
  5. }

2 - Classe du formulaire

  1. # web/modules/mon_module/src/Entity/Form/NodeCustomForm.php
  2. <?php
  3.  
  4. namespace Drupal\mon_module\Entity\Form;
  5.  
  6. use Drupal\Core\Form\FormStateInterface;
  7. use Drupal\node\NodeForm;
  8.  
  9. class NodeCustomForm extends NodeForm {
  10.  
  11. public function form(array $form, FormStateInterface $form_state) {
  12. $form = parent::form($form, $form_state);
  13. // Faite votre magie ici
  14. /** @var \Drupal\node\Entity\Node $node */
  15. $node = $this->entity;
  16. return $form;
  17. }
  18.  
  19. }

Cette classe étant la classe normale, nous avons donc juste à appliquer nos modifications à l'intérieur.

Le problème de cette solution : on ne peut pas avoir deux modules qui surchargent la classe, à moins d'étendre la première dans la seconde.

 

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...