在表单验证Drupal之后执行Ajax回调

时间:2017-06-07 09:12:54

标签: ajax drupal drupal-7 drupal-8

我在Drupal 8中有一个表单,在hook_form_alter中我正在尝试发出Ajax请求。

function helloworld_form_alter(&$form, $form_state, $form_id) {

if ($form_id == 'contact_message_feedback_form') {

$form['actions']['submit']['#ajax'] = array(
  'wrapper' => 'form_wrapper',
  'callback' => 'custom_callback',
  'event' => 'click',
  'progress' => [
  'type' => 'throbber',
  'message' => 'Veryfieng'],
  );  

$form['test_selection'] = [
  '#type' => 'hidden', 
  '#prefix' => '<div id="form_wrapper">',
  '#suffix' => '</div>',
  '#weight' => 100,
];
  }
} 



 function custom_callback($form, &$form_state) {
   $output = array();

   $output['#markup'] = 'Thank you! Your message has been sent!';

   return $output;
 }

这可以工作,但忽略整个验证功能。 如何在调用custom_callback()之前验证表单?

1 个答案:

答案 0 :(得分:0)

不是使用自定义Ajax回调,而是尝试下面的代码,它会调用Form的submitForm()方法,因此在调用submitForm()之前调用validateForm()方法 -

$form['actions']['submit'] = array(
  '#attributes' => array (
     'class' => array (
         'use-ajax-submit'
     ), 
  ),
  '#ajax' => array(
     'wrapper' => 'form_wrapper',
  )
);  

简而言之,它会通过Ajax提交您的表单。