web-dev-qa-db-fra.com

Comment ajouter un crochet de modification de formulaire dans drupal 8

Je suis très nouveau sur drupal 8, j'essaie de modifier un formulaire sous le type de contenu personnalisé "Question". Le formulaire a un identifiant "node-question-form".

J'ai installé un module et j'essaye d'ajouter hook_FORM_ID_alter () mais ce n'est jamais appelé. Même le crochet le plus simple ne fonctionne pas. par exemple:

function constellator_form_alter(&$form, &$form_state, $form_id){ echo "alter the form"; exit; }

où "constellateur" est le nom du module.

Je suis coincé avec depuis le matin et rien ne fonctionne pour moi, toute aide sera grandement appréciée.

Merci Gaurav Mehra

6
Gaurav

Voici un exemple de travail que j'ai extrait d'un projet et modifié pour avoir le nom de votre module.

Ajoutez ceci en haut de votre fichier .module:

use Drupal\Core\Form\FormStateInterface;

Copiez ensuite ceci dans

/**
 * Implements hook_form_alter().
 */
function constellator_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  // Adding custom validation for the welcome page type field.
  if ($form_id == 'node_article_edit_form' || $form_id == 'node_article_form') {
    // Do some stuff.
  }
}

Je pense que ce que vous ne faites pas est probablement en train de vider le cache Drupal pour enregistrer le hook. Vous pouvez cliquer sur "effacer tous les caches". Ou mieux encore, installez l'utilitaire de ligne de commande drush et utilisez "drush cr".

enter image description here

10
oknate

Si vous avez configuré un thème personnalisé, sans ajouter aucune exigence d'espace de noms, vous pouvez facilement modifier votre formulaire en utilisant hook_form_form_id_alter() dans votre fichier theme_name.theme.

function bootstrap_ga_form_user_login_form_alter(&$form, &$form_state, $form_id) {
  global $base_url;
  $form['#validate'][] = '_bootstrap_ga_form_user_login_form_validate';
}

J'ai ajouté une validation personnalisée au formulaire de connexion utilisateur. bootstrap_ga est le nom du thème personnalisé.

3
Vinodhini

Essayez-le dans votre module personnalisé

Utiliser l'espace de noms ci-dessous

    use Drupal\node\Entity\Node;
    use Drupal\Core\Form\FormStateInterface;

Utilisez ce hook_form_alter pour le nœud particulier

    //constellator_form_node_question_form_alter
function modulename_form_Form_ID_form_alter(&$form, &$form_state, $form_id){   
  //echo <pre>; print_r($form); die;
}

Et ce crochet sera utilisé pour modifier l'identifiant de forme du nœud particulier

1
logeshvaran