Ich habe ein Problem, bei dem ein Benutzer jedes von der Formular-API erstellte Formular mehrmals senden kann (schnelles Klicken führt zu mehreren Anforderungen).
Ich habe die grundlegende clientseitige (Javascript) Lösung zum Deaktivieren der Schaltfläche eingeführt, bin aber gespannt, wie diese Situation am besten auf der Serverseite verhindert werden kann.
Gibt es eine empfohlene Möglichkeit, das Formular-Token-System von Drupal zu verwenden, um dies zu handhaben? Insbesondere eine globale Formularlösung (dh Hinzufügen eines benutzerdefinierten Validators zu jedem Formular mithilfe von hook_form_alter ()).
Mein bisheriger Ansatz war ungefähr so:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$form['#validate'][] = 'mymodule_form_validate';
}
function mymodule_form_validate(&$form, &$form_state){
//initialize form array
if (!isset($_SESSION['submitted_forms'])){
$_SESSION['submitted_forms'] = array();
}
$form_token = $form_state['values']['form_token'];
if ( isset($_SESSION['submitted_forms'][$form_token]) && $_SESSION['submitted_forms'][$form_token] = TRUE ){
form_set_error('name]', 'This form has already been submitted');
}
else{
$_SESSION['submitted_forms'][$form_token] = TRUE;
}
}
Ich habe Probleme, wenn das form_token nicht nur für das Formular gilt - es scheint gleich zu bleiben, egal was passiert. Ich verstehe wahrscheinlich falsch, was das Token im großen Schema der Form API ist.
Jeder Einblick wird geschätzt!