web-dev-qa-db-ja.com

送信前にWebフォームの値を変更するにはどうすればよいですか?

送信する前に、Webフォームの非表示フィールドにいくつかの値を追加しようとしています。 Drupal 8?にWebフォーム送信にアクセスするためのフックはありますか?私は試しました 保存する直前にWebフォーム送信フィールドを変更するにはどうすればよいですか? 運がありません。

2
Abin

リンクされた答えはほぼ正しいですが、それを機能させるための更新は2、3だけです。カスタム.moduleに以下を追加します:

use Drupal\Core\Form\FormStateInterface;

function MODULENAME_form_alter(&$form,$form_state, $form_id) {
  if ($form_id == 'FORMID') {
    $form['actions']['submit']['#validate'][] = 'MODULENAME_form_validate';
  }
}

function MODULENAME_form_validate($form, FormStateInterface $form_state) {
  $form_state->setValue('hidden_id', 'Value for Hidden field');
}
5
HeyOkaySaturday

送信前にWebフォームの値を変更するには-

私のコードでは、タイムスタンプを「Y-m-d HH:MM:SS」から「Y-m-d」形式に変更し、DBに保存する前に変更しています。また、「webform_presave」としてカスタムモジュール名を作成しています

/**
 * Implements hook_ENTITY_TYPE_presave().
 */

function webform_presave_webform_submission_presave(\Drupal\webform\Entity\WebformSubmission $submission) {
  $submissionCreated = $submission->getCreatedTime();
  $submissionCreatedChnaged = format_date($submissionCreated, 'custom_date');
  $a = strptime($submissionCreatedChnaged, '%Y-%m-%d');
  $timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
  $submission->setCreatedTime($timestamp);
}
0
Wasim Khan