it-swarm.com.de

Wie implementiere ich einen benutzerdefinierten Submit-Handler in hook_form_alter ()?

Ich habe eines meiner Drupal 7 Module auf 8 aktualisiert und habe ein Problem mit meiner Formularänderung. Ich füge eine Validierungsfunktion und einen Submit-Handler hinzu. Die Validierungsfunktion ist Ich frage mich, ob dies bedeutet, dass es einen Symfony-ähnlichen Ansatz gibt, um vorhandenen Formularen Submit-Handler hinzuzufügen. Ich habe viel gesucht und Ich kann keine Beispiele finden. Ich habe auch einige in Arbeit befindliche D8-Module durchgesehen, aber ich habe dort auch keine wirklichen Arbeitsbeispiele gefunden.

Hat jemand eine Idee, wie man das richtig macht Drupal 8)?

15
Arbee

Nach dem Beispiel in der Dokumentation ist es dasselbe wie für Drupal 7:

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

Sie finden ähnliche (Arbeits-) Logik in

Und noch ein paar andere.

13
Clive

Mit dem folgenden Code können Sie hinzufügen, wie viele Submit-Handler Sie möchten:

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

Wenn Sie einen Submit-Handler hinzufügen möchten after den Standard-Submit-Handler (einen Submit-Handler, der nach dem Submit-Rückruf aufgerufen wird), können Sie Folgendes verwenden.

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

So entfernen Sie den Submit-Handler:

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

Das Verhalten wird entweder geändert oder ist von Fall zu Fall unterschiedlich. Mit dem Node Mehrfachbestätigungsformular löschen

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

Der Code von @ Clive bewirkt, dass Drupal den Haupthandler ignoriert. In diesem Fall fügen Sie den Handler zum $form['#submit'] Sektion:

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

Hier erfahren Sie, wie Sie einen benutzerdefinierten Übermittlungshandler an das Formular zum Hinzufügen/Bearbeiten von Artikelknoten in 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...');
}

Ich konnte einen benutzerdefinierten Submit-Handler nicht erfolgreich an $form['#submit'] Anhängen und die Funktion ordnungsgemäß auslösen. Ich musste es explizit an die Schaltfläche Speichern und veröffentlichen anhängen, wenn ich einen neuen Artikel erstellte, und es an die Schaltfläche - anhängen. Schaltfläche Speichern und veröffentlicht halten beim Bearbeiten eines vorhandenen Artikels.

Neben publish stehen einige der anderen Schaltflächenaktionen zur Verfügung:

unpublish
preview
delete
1