送信する前に、Webフォームの非表示フィールドにいくつかの値を追加しようとしています。 Drupal 8?にWebフォーム送信にアクセスするためのフックはありますか?私は試しました 保存する直前にWebフォーム送信フィールドを変更するにはどうすればよいですか? 運がありません。
リンクされた答えはほぼ正しいですが、それを機能させるための更新は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');
}
送信前に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);
}