Form API
https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.h...
ex pratique
$form_state['redirect'] = array(
'node/[node number]',
array(
'query' => array(
'variable_name' => 'value',
),
'fragment' => 'hash_fragment'
),
);
crée l'url: ..?node/[node number]&variable_name=value#hash_fragment
1. drupal_build_form (wrapped by drupal_get_form())
- merge in form_state_defaults()
- return if batch processing: drupal_rebuild_form($form_id, $_SESSION['batch_form_state'])
- try cache: form_get_cache($form_state['input']['form_build_id'])
-
otherwise
-
drupal_retrieve_form()
- array from hook_forms() callback or $form_id()
-
drupal_prepare_form()
- generate #form_build_id and optional #token
- form defaults incl. #tree, #method, #validate, #submit, #theme
- hook_form_alter
- hook_form_BASE_FORM_ID_alter
- hook_form_FORM_ID_alter
-
drupal_retrieve_form()
-
with cached or new form: drupal_process_form()
-
with form_builder()
- element_info(#type)
- user #input
- #process happens on the way down with recursion
- set any values, inherit any #disabled, #access etc.
- (recurse into children with form_builder())
- #after_build happens on the way back up with recursion
-
form submission? drupal_validate_form()
- #token
-
_form_validate()
- #maxlength
- #options
- #required
-
validate:
- $form_state['#validate_handlers']
- or
- $form['#validate']
- #element_validate
-
no errors?
- #submit
- cache clear
- batch process
- drupal_redirect_form()
- drupal_form_submit() - quit now
-
multistep: $form_state['rebuild']
- drupal_rebuild_form()
- form/form state caching
-
with form_builder()
2. drupal_rebuild_form()
- drupal_retrieve_form()
- AJAX / partial form - reuse #build_id, fix #action
- drupal_prepare_form()
- cache earlier than drupal_process_form()
- form_builder()
- [unlike drupal_process_form(), no submission validation]
3. drupal_form_submit()
- merge in form_state_defaults()
- drupal_retrieve_form()
- (always submit; suppress errors)
- drupal_prepare_form()
- drupal_process_form()