web-dev-qa-db-fra.com

Comment implémentez-vous un gestionnaire de soumission personnalisé dans hook_form_alter ()?

J'ai mis à jour l'un de mes Drupal 7 modules en 8 et j'ai un problème avec ma modification de formulaire. J'ajoute une fonction de validation et un gestionnaire d'envoi. La fonction de validation est être appelé très bien, mais la fonction de soumission ne se déclenche pas. Je me demande si cela signifie qu'il existe une approche de style Symfony qui doit être prise pour ajouter des gestionnaires de soumission aux formulaires existants. J'ai fait beaucoup de recherches et Je ne trouve aucun exemple. J'ai également regardé certains modules D8 en cours de réalisation, mais je n'y ai pas vraiment trouvé d'exemples de travail.

Quelqu'un a-t-il une idée de la bonne façon Drupal 8 de le faire?)

15
Arbee

Selon l'exemple de la documentation c'est la même chose que pour Drupal 7:

$form['actions']['submit']['#submit'][] = 'mymodule_upload_enabled_types_submit';

Vous pouvez trouver une logique (de travail) similaire dans

Et quelques autres d'ailleurs.

13
Clive

Vous pouvez ajouter le nombre de gestionnaires d'envoi souhaité à l'aide du code suivant:

 $form['actions']['submit']['#submit'][] = 'mymodule_what_ever_function';

Si vous souhaitez ajouter un gestionnaire de soumission après le gestionnaire de soumission par défaut, (un gestionnaire de soumission qui sera appelé après le rappel de soumission), vous pouvez utiliser ce qui suit.

$form['#submit'][1] = test_function;

Pour supprimer le gestionnaire de soumission:

unset($form["actions"]['submit']);
6
DEVARAJ JOHNSON

Le comportement est soit modifié, soit différent d'un cas à l'autre. Avec le Node Supprimer le formulaire de confirmation multiple

$form['actions']['submit']['#submit'][] = 'mymodule_upload_enabled_types_submit';

Le code de @ Clive fait Drupal ignorer le gestionnaire principal. Dans ce cas, ajoutez le gestionnaire au $form['#submit'] section:

$form['#submit'][] = 'mymodule_upload_enabled_types_submit';
3
lifecoder

Voici comment attacher un gestionnaire de soumission personnalisé au formulaire d'ajout/modification de nœud d'article dans Drupal 8:

<?php

use Drupal\Core\Form\FormStateInterface;

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

  // Use this to reveal the form id.
  //drupal_set_message($form_id);

  // Use this with the devel module to inspect the button action(s).
  //kint($form['actions']);

  switch ($form_id) {

    case 'node_article_form':      // New article nodes.
    case 'node_article_edit_form': // Existing article nodes.

      // Attach our custom submit handler.
      $form['actions']['publish']['#submit'][] = 'my_module_node_article_form_submit';
      break;

  }

}

function my_module_node_article_form_submit($form, FormStateInterface $form_state) {
  drupal_set_message('Running custom submit handler...');
}

Je n'ai pas réussi à ajouter un gestionnaire d'envoi personnalisé à $form['#submit'] et que la fonction se déclenche correctement. J'ai eu pour l'attacher explicitement au bouton Enregistrer et publier lors de la création d'un nouvel article, et l'attacher au - Enregistrer et garder publié bouton lors de la modification d'un article existant.

Outre publish, voici quelques-unes des autres actions de bouton disponibles:

unpublish
preview
delete
1
tyler.frankenstein