Outils pour utilisateurs

Outils du site


cms:drupal:fapi

Form API

La gestion des formulaires dans drupal est un poil complexe quand on sort des cas simples :-/

Un petit memo pour se souvenir de comment tout ça fonctionne donc !

Le workflow en image http://drupal.org/node/165104

Mais quand y'a un pb de validation, ou bien quand on fait juste un preview, ça peut se compliquer un peu (parce que l'on récupère un form du cache, +/- déjà construit s'il y a eu des requetes ajax qui ont fait des build et des set_cache).

Ce que j'ai remarqué, c'est que si une requete ajax fait du form_get_cache/form_builder/form_set_cache, mes fonctions after_build ne seront plus appelées après le post du form complet…

Reprenons donc le cycle fapi…

drupal_get_form :

  • si POST ⇒ form_get_cache
  • sinon ⇒
    • drupal_retrieve_form
      • construction du form (hooks _form & _forms)
    • drupal_prepare_form
      • hook_element
      • hook_form_alter
  • $form['#post'] = $_POST;
  • drupal_process_form
    • reset $form_state['values']
    • form_builder passe sur chaque element récursivement
      • hook_element
      • _form_builder_handle_input_element
      • _after_build
    • si post drupal_validate_form
    • si post et pas d'erreur au _validate et pas de rebuild ⇒ _submit et clear cache
    • !#programmed && !rebuild && !storage ⇒ drupal_redirect_form
  • si #cache ⇒ form_set_cache
  • si $form_state['storage'] ou ($form_state['rebuild'] et $form_state['process_input'] et !form_get_errors) ⇒ drupal_rebuild_form
    • return drupal_render_form
cms/drupal/fapi.txt · Dernière modification : 21/04/2010 13:40 de daniel