Wie ändere ich den Formularübermittlungs-Handler?

16

Aus irgendeinem Grund muss ich einige Zeichen (falls vorhanden) in jedem einzelnen Textfeld in irgendeiner Form ersetzen, bevor sie in der Datenbank gespeichert werden. Mit anderen Worten, ich benötige einen Haken, mit dem ich alle eingereichten Daten abrufen und deren Zeichen ersetzen kann.
Ich habe diese Lösung gefunden:

function hook_form_alter($form, $form_state, $form_id) {
  $form['#submit'] = 'my_custom_submission_function';
}

Dies ist jedoch keine gute Idee, da ich mich auch um den Rest des Einreichungsfortschritts kümmern muss. Ich muss nur einige Zeichen ersetzen. Gibt es einen Haken dafür? Was sind die Lösungen?

Pedram Behroozi
quelle

Antworten:

22

$form['#submit']Speichert ein Array von Formularübergabehandlern. Mit dem Code, den Sie angegeben haben, überschreiben Sie ihn, indem Sie nur Ihren eigenen Code hinzufügen. Um das gewünschte Ergebnis zu erhalten, sollten Sie Ihren Submit-Handler wie folgt als erstes Element im Array hinzufügen:

array_unshift($form['#submit'], 'mymodule_custom_submission');

Die richtigen Werte in die richtigen Formen zu bringen und einige Zeichen zu ersetzen, ist wahrscheinlich ein größeres Problem. Möglicherweise möchten Sie die zu ändernden Formulare / Felder eingrenzen, um sicherzustellen, dass nichts beschädigt wird.

Madis
quelle
2

Möglicherweise ist es besser, diese Änderungen während der Validierung vorzunehmen, anstatt sie wie von Drupal vorgeschlagen einzureichen (siehe form_set_value-Funktion unter https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7 ).

In Ihrem hook_form_alter können Sie es sogar an das Ende bestehender Validierungsfunktionen anfügen, wenn Sie möchten:

$form['#validate'][] = 'mymodule_custom_validation';
Vishnar Tadeleratha
quelle