Je rencontre un problème où un utilisateur peut soumettre n'importe quel formulaire créé par l'API Form plusieurs fois (un clic rapide entraînant plusieurs demandes).
J'ai mis dans la solution de base côté client (javascript) de désactiver le bouton, mais je suis curieux de savoir quelle est la meilleure approche pour éviter cette situation côté serveur.
Existe-t-il un moyen recommandé d'utiliser le système de jetons de formulaire de Drupal pour gérer cela? Surtout une solution de formulaire globale (c'est-à-dire, ajouter un validateur personnalisé à chaque formulaire en utilisant hook_form_alter ()).
Jusqu'à présent, mon approche a été quelque chose comme ceci:
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;
}
}
Je rencontre des problèmes lorsque le form_token n'est pas unique au formulaire - il semble rester le même quoi qu'il arrive. Je comprends probablement mal ce qu'est le jeton dans le grand schéma de la forme api.
Toute idée est appréciée!