it-swarm.com.de

Wie ändere ich den Handler für die Formularübermittlung?

Aus irgendeinem Grund muss ich einige Zeichen (falls vorhanden) in jedem einzelnen Textfeld in irgendeiner Form ersetzen, kurz bevor sie in der Datenbank gespeichert werden. Mit anderen Worten, ich brauche einen Haken, mit dem ich alle übermittelten Daten abrufen und ihre 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?

16
Pedram Behroozi

$form['#submit'] speichert ein Array von Formularübermittlungshandlern. Mit dem von Ihnen angegebenen Code überschreiben Sie ihn, indem Sie nur Ihren eigenen hinzufügen. Um das gewünschte Ergebnis zu erzielen, 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 den richtigen Formen zu finden und einige Zeichen zu ersetzen, ist wahrscheinlich ein größeres Problem an sich. Möglicherweise möchten Sie die Formulare/Felder eingrenzen, die Sie ändern müssen, um sicherzustellen, dass Sie nichts beschädigen.

22
Madis

Vielleicht ist es besser, diese Änderungen während der Validierung durchzuführen, als sie zu übermitteln, wie von Drupal) vorgeschlagen (siehe Funktion form_set_value unter https://api.drupal.org/api/drupal/). enthält! form.inc/function/form_set_value/7 ).

In Ihrem hook_form_alter können Sie es also sogar am Ende vorhandener Validierungsfunktionen hinzufügen, wenn Sie möchten:

$form['#validate'][] = 'mymodule_custom_validation';
2