Soumettre un formulaire généré avec la formapi en GET sans les valeurs form_id et form_build_id

Soumis par GoZ le lun 10/03/2014 - 21:24

Soumettre un formulaire généré avec la formapi en GET sans les valeurs form_id et form_build_id

Il serait dommage de générer un formulaire "à la main" sous Drupal alors qu'il y a la [formapi](https://api.drupal.org/api/drupal/developer!topics!forms_api_reference…) pour nous faciliter la vie.

Le problème à résoudre ici est d'utiliser la formapi pour générer une formulaire d'envoi en GET mais sans être pollué par les variables de drupal en URL (form_id, form_build_id, op etc).

Avec ses formulaires, il est possible de réaliser des actions de validation et de soumission. Seulement, cela fonctionne très bien avec des soumissions de formulaire par défaut qui se font en méthode POST. Lorsque l'on veut utiliser la méthode GET, c'est une toute autre histoire.

Méthode appelée avec la méthode POST pour effectuer une action au submit (dans la définition de notre formulaire drupal_get_form) :
$form['#submit'][] = '_MONMODULE_ma_fonction_d_action_a_la_soumission';

Il serait tout a fait possible de cette fonction de nettoyer ensuite nos variables envoyées (pas très utile en POST mais c'est possible).

Pour faire la même chose en GET :
$form['#method'] = 'GET';
$form['#pre_render'] = '_MONMODULE_ma_fonction_d_action_a_la_soumission'; // Fonction appelée lors du rendu du formulaire

// Submit button
$form['actions']['submit']['#name'] = ""; // Suppression de la variable 'op' qui s'afficherait dans l'url

function _MONMODULE_ma_fonction_d_action_a_la_soumission($form) {
unset($form['form_token']);
unset($form['form_build_id']);
unset($form['form_id']);
return $form;
}

Voilà, à la génération du formulaire, on retire les form_token, form_build_id et form_id ainsi que op, on se retrouve donc avec une url qui ne contient que les valeurs utiles.