diff --git a/core/includes/ajax.inc b/core/includes/ajax.inc
index 6d21c985ffe..45bb706e17e 100644
--- a/core/includes/ajax.inc
+++ b/core/includes/ajax.inc
@@ -376,8 +376,8 @@ function ajax_form_callback() {
if (!empty($form_state['triggering_element'])) {
$callback = $form_state['triggering_element']['#ajax']['callback'];
}
- if (!empty($callback) && function_exists($callback)) {
- return $callback($form, $form_state);
+ if (!empty($callback) && is_callable($callback)) {
+ return call_user_func_array($callback, array(&$form, &$form_state));
}
}
diff --git a/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module b/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module
index dfbd7f05096..96288f9132f 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module
+++ b/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module
@@ -5,6 +5,8 @@
* Simpletest mock module for Ajax forms testing.
*/
+use Drupal\ajax_forms_test\Callbacks;
+
/**
* Implements hook_menu().
*/
@@ -41,6 +43,8 @@ function ajax_forms_test_menu() {
* Tests form_state['values'] during callback.
*/
function ajax_forms_test_simple_form($form, &$form_state) {
+ $object = new Callbacks();
+
$form = array();
$form['select'] = array(
'#type' => 'select',
@@ -49,7 +53,7 @@ function ajax_forms_test_simple_form($form, &$form_state) {
'green' => 'green',
'blue' => 'blue'),
'#ajax' => array(
- 'callback' => 'ajax_forms_test_simple_form_select_callback',
+ 'callback' => array($object, 'selectCallback'),
),
'#suffix' => '
No color yet selected
',
);
@@ -58,7 +62,7 @@ function ajax_forms_test_simple_form($form, &$form_state) {
'#type' => 'checkbox',
'#title' => t('Test checkbox'),
'#ajax' => array(
- 'callback' => 'ajax_forms_test_simple_form_checkbox_callback',
+ 'callback' => array($object, 'checkboxCallback'),
),
'#suffix' => 'No action yet
',
);
@@ -69,26 +73,6 @@ function ajax_forms_test_simple_form($form, &$form_state) {
return $form;
}
-/**
- * Ajax form callback: Selects color.
- */
-function ajax_forms_test_simple_form_select_callback($form, $form_state) {
- $commands = array();
- $commands[] = ajax_command_html('#ajax_selected_color', $form_state['values']['select']);
- $commands[] = ajax_command_data('#ajax_selected_color', 'form_state_value_select', $form_state['values']['select']);
- return array('#type' => 'ajax', '#commands' => $commands);
-}
-
-/**
- * Ajax form callback: Selects checkbox value.
- */
-function ajax_forms_test_simple_form_checkbox_callback($form, $form_state) {
- $commands = array();
- $commands[] = ajax_command_html('#ajax_checkbox_value', (int) $form_state['values']['checkbox']);
- $commands[] = ajax_command_data('#ajax_checkbox_value', 'form_state_value_select', (int) $form_state['values']['checkbox']);
- return array('#type' => 'ajax', '#commands' => $commands);
-}
-
/**
* Form constructor for the Ajax Command display form.
*/
diff --git a/core/modules/system/tests/modules/ajax_forms_test/lib/Drupal/ajax_forms_test/Callbacks.php b/core/modules/system/tests/modules/ajax_forms_test/lib/Drupal/ajax_forms_test/Callbacks.php
new file mode 100644
index 00000000000..92b50b854c2
--- /dev/null
+++ b/core/modules/system/tests/modules/ajax_forms_test/lib/Drupal/ajax_forms_test/Callbacks.php
@@ -0,0 +1,34 @@
+ 'ajax', '#commands' => $commands);
+ }
+
+ /**
+ * Ajax callback triggered by checkbox.
+ */
+ function checkboxCallback($form, $form_state) {
+ $commands = array();
+ $commands[] = ajax_command_html('#ajax_checkbox_value', (int) $form_state['values']['checkbox']);
+ $commands[] = ajax_command_data('#ajax_checkbox_value', 'form_state_value_select', (int) $form_state['values']['checkbox']);
+ return array('#type' => 'ajax', '#commands' => $commands);
+ }
+}