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 par daniel


