diff --git a/core/includes/form.inc b/core/includes/form.inc index 5d6b32e50435918acd62b5038a8411fa8df5bb55..d74dcf7d58027ae214cd51e99203930d5e690f90 100644 --- a/core/includes/form.inc +++ b/core/includes/form.inc @@ -1422,8 +1422,8 @@ function _form_validate(&$elements, &$form_state, $form_id = NULL) { // Call any element-specific validators. These must act on the element // #value data. elseif (isset($elements['#element_validate'])) { - foreach ($elements['#element_validate'] as $function) { - $function($elements, $form_state, $form_state['complete_form']); + foreach ($elements['#element_validate'] as $callback) { + call_user_func_array($callback, array(&$elements, &$form_state, &$form_state['complete_form'])); } } diff --git a/core/modules/system/tests/modules/form_test/form_test.module b/core/modules/system/tests/modules/form_test/form_test.module index 6ea5aa31f442a35057cd4006c885cd4d669cb753..03b7cb82f97721c17284ead4198dbdc0a6e9aa91 100644 --- a/core/modules/system/tests/modules/form_test/form_test.module +++ b/core/modules/system/tests/modules/form_test/form_test.module @@ -5,6 +5,8 @@ * Helper module for the form API tests. */ +use Drupal\form_test\Callbacks; + /** * Implements hook_menu(). */ @@ -385,11 +387,13 @@ function system_form_form_test_alter_form_alter(&$form, &$form_state) { * should be contained in the rebuilt form. */ function form_test_validate_form($form, &$form_state) { + $object = new Callbacks(); + $form['name'] = array( '#type' => 'textfield', '#title' => 'Name', '#default_value' => '', - '#element_validate' => array('form_test_element_validate_name'), + '#element_validate' => array(array($object, 'validateName')), ); $form['submit'] = array( '#type' => 'submit', @@ -403,42 +407,6 @@ function form_test_validate_form($form, &$form_state) { return $form; } -/** - * Form element validation handler for 'name' in form_test_validate_form(). - */ -function form_test_element_validate_name(&$element, &$form_state) { - $triggered = FALSE; - if ($form_state['values']['name'] == 'element_validate') { - // Alter the form element. - $element['#value'] = '#value changed by #element_validate'; - // Alter the submitted value in $form_state. - form_set_value($element, 'value changed by form_set_value() in #element_validate', $form_state); - - $triggered = TRUE; - } - if ($form_state['values']['name'] == 'element_validate_access') { - $form_state['storage']['form_test_name'] = $form_state['values']['name']; - // Alter the form element. - $element['#access'] = FALSE; - - $triggered = TRUE; - } - elseif (!empty($form_state['storage']['form_test_name'])) { - // To simplify this test, just take over the element's value into $form_state. - form_set_value($element, $form_state['storage']['form_test_name'], $form_state); - - $triggered = TRUE; - } - - if ($triggered) { - // Output the element's value from $form_state. - drupal_set_message(t('@label value: @value', array('@label' => $element['#title'], '@value' => $form_state['values']['name']))); - - // Trigger a form validation error to see our changes. - form_set_error(''); - } -} - /** * Form validation handler for form_test_validate_form(). */ diff --git a/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/Callbacks.php b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/Callbacks.php new file mode 100644 index 0000000000000000000000000000000000000000..6699cd7da37154711c3b66bfc0d6430a48bb26e1 --- /dev/null +++ b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/Callbacks.php @@ -0,0 +1,50 @@ +<?php + +/** + * @file + * Definition of Drupal\form_test\Callbacks. + */ + +namespace Drupal\form_test; + +/** + * Simple class for testing methods as element validation callbacks. + */ +class Callbacks { + + /** + * Form element validation handler for 'name' in form_test_validate_form(). + */ + public function validateName(&$element, &$form_state) { + $triggered = FALSE; + if ($form_state['values']['name'] == 'element_validate') { + // Alter the form element. + $element['#value'] = '#value changed by #element_validate'; + // Alter the submitted value in $form_state. + form_set_value($element, 'value changed by form_set_value() in #element_validate', $form_state); + + $triggered = TRUE; + } + if ($form_state['values']['name'] == 'element_validate_access') { + $form_state['storage']['form_test_name'] = $form_state['values']['name']; + // Alter the form element. + $element['#access'] = FALSE; + + $triggered = TRUE; + } + elseif (!empty($form_state['storage']['form_test_name'])) { + // To simplify this test, just take over the element's value into $form_state. + form_set_value($element, $form_state['storage']['form_test_name'], $form_state); + + $triggered = TRUE; + } + + if ($triggered) { + // Output the element's value from $form_state. + drupal_set_message(t('@label value: @value', array('@label' => $element['#title'], '@value' => $form_state['values']['name']))); + + // Trigger a form validation error to see our changes. + form_set_error(''); + } + } +}