Как мне изменить значения веб-формы перед отправкой?


Я пытаюсь добавить некоторые значения в скрытое поле в моей веб-форме перед отправкой. Есть ли какие-либо крючки для доступа к отправке веб-форм в Drupal 8? Я пытался Как изменить поле отправки веб-формы прямо перед его сохранением? безрезультатно.

 2
Author: Community, 2017-03-03

2 answers

Связанный ответ в основном правильный, всего пара обновлений, чтобы он заработал. В пользовательском модуле добавьте:

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');
}
 6
Author: HeyOkaySaturday, 2017-03-07 21:43:56

Для изменения значений веб-формы перед отправкой -

В своем коде я изменяю метку времени с "Y-m-d ЧЧ:ММ:СС" на формат "Y-m-d" и изменяю его перед сохранением в БД. Кроме того, я создаю пользовательское имя модуля как "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);
}
 1
Author: Kashmiri, 2019-04-24 06:59:15