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