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é
# mon_module.module
function mon_module_entity_type_alter(array &$entity_types) {
$entity_types['node']->setFormClass('default', \Drupal\mon_module\Entity\Form\NodeCustomForm::class);
$entity_types['node']->setFormClass('edit', \Drupal\mon_module\Entity\Form\NodeCustomForm::class);
}
2 - Classe du formulaire
# web/modules/mon_module/src/Entity/Form/NodeCustomForm.php
<?php
namespace Drupal\mon_module\Entity\Form;
use Drupal\Core\Form\FormStateInterface;
use Drupal\node\NodeForm;
class NodeCustomForm extends NodeForm {
public function form(array $form, FormStateInterface $form_state) {
$form = parent::form($form, $form_state);
// Faite votre magie ici
/** @var \Drupal\node\Entity\Node $node */
$node = $this->entity;
return $form;
}
}
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