Comment modifier le gestionnaire de soumission de formulaire?

16

Pour une raison quelconque, je dois remplacer certains caractères (s'ils existent) dans chaque champ de texte sous n'importe quelle forme juste avant de les stocker dans la base de données. En d'autres termes, j'ai besoin d'un crochet dans lequel je pourrais obtenir toutes les données soumises et remplacer leurs caractères.
J'ai trouvé cette solution:

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

Mais ce n'est pas une bonne idée car je dois aussi m'occuper du reste de la progression de la soumission. J'ai juste besoin de remplacer certains caractères. Y a-t-il un crochet pour le faire? Quelles sont les solutions?

Pedram Behroozi
la source

Réponses:

22

$form['#submit']stocke un tableau de gestionnaires d'envoi de formulaires. Avec le code que vous avez fourni, vous l'écrasez en ajoutant uniquement le vôtre. Pour obtenir le résultat souhaité, vous devez ajouter votre gestionnaire de soumission comme premier élément du tableau comme ceci:

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

Obtenir les bonnes valeurs dans les bonnes formes et remplacer certains caractères est probablement un problème plus important en soi. Vous voudrez peut-être affiner les formulaires / champs que vous devez modifier pour vous assurer de ne rien casser.

Madis
la source
2

Il serait peut-être préférable d'effectuer ces modifications lors de la validation au lieu de la soumission comme suggéré par Drupal (voir la fonction form_set_value sur https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7 ).

Ainsi, dans votre hook_form_alter, vous pouvez même l'ajouter à la fin des fonctions de validation existantes si vous le souhaitez:

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