1 form.inc form_execute_handlers($type, &$form, &$form_state)

Executes custom validation and submission handlers for a given form.

Button-specific handlers are checked first. If none exist, the function falls back to form-level handlers.


$type: The type of handler to execute. 'validate' or 'submit' are the defaults used by Form API.

$form: An associative array containing the structure of the form.

$form_state: A keyed array containing the current state of the form. If the user submitted the form by clicking a button with custom handler functions defined, those handlers will be stored here.

Return value

bool: TRUE if any handlers were executed at all. FALSE if no handlers were found to execute. This return value only indicates if handlers were fired, it does not represent all validations passed or all submit values were saved. The result of those actions will be stored in the $form_state array.

Related topics


core/includes/form.inc, line 1532
Functions for form and batch generation and processing.


function form_execute_handlers($type, &$form, &$form_state) {
  $return = FALSE;
  // If there was a button pressed, use its handlers.
  if (isset($form_state[$type . '_handlers'])) {
    $handlers = $form_state[$type . '_handlers'];
  // Otherwise, check for a form-level handler.
  elseif (isset($form['#' . $type])) {
    $handlers = $form['#' . $type];
  else {
    $handlers = array();

  foreach ($handlers as $function) {
    // Check if a previous _submit handler has set a batch, but make sure we
    // do not react to a batch that is already being processed (for instance
    // if a batch operation performs a backdrop_form_submit()).
    if ($type == 'submit' && ($batch = &batch_get()) && !isset($batch['id'])) {
      // Some previous submit handler has set a batch. To ensure correct
      // execution order, store the call in a special 'control' batch set.
      // See _batch_next_set().
      $batch['sets'][] = array('form_submit' => $function);
      $batch['has_form_submits'] = TRUE;
    else {
      $function($form, $form_state);
    $return = TRUE;
  return $return;