Рейтинг:0

обновление значений $webform_submission в функции alterForm пользовательского обработчика веб-форм

флаг in

Я сталкиваюсь с ситуацией, и я надеюсь, что кто-то сможет дать несколько советов и рекомендаций, поскольку мой подход в данный момент не работает.

Мы создаем веб-форму, содержащую поле адреса электронной почты. Когда пользователь заполняет это поле, мы берем его адрес электронной почты и выполняем поиск учетной записи в функции validateForm нашего пользовательского обработчика веб-форм.Отправка формы не сохраняется в нашей базе данных.

Если у пользователя есть учетная запись, связанная с указанным адресом электронной почты, мы получаем результаты и обновляем количество полей в $webform_submission следующим образом:

общедоступная функция validateForm (массив и $ форма, FormStateInterface $ form_state, WebformSubmissionInterface $ webform_submission) {

  // Берем адрес электронной почты
  $email_address = !пусто($form_state->getValue('user_email')) ? Html::escape($form_state->getValue('user_email')) : NULL;

  если (isset($email_address)) {

    // Получить контактную запись, связанную с электронной почтой
    $contact_record_obj = Utility::getContactObjFromEmailAddress($email_address);

    если(isset($contact_record_obj)) {

      // Обновляем данные $webform_submission
      $webform_submission->setElementData("first_name", $contact_record_obj->firstName);
      $webform_submission->setElementData("last_name", $contact_record_obj->lastName);
      $webform_submission->setElementData("business_phone", $contact_record_obj->businessPhone);

      // Сохранить данные $webform_submission?
      $webform_submission->сохранить();

    }
  }
}

Я разместил точки останова в каждой строке, где вызывается setElementData, и я вижу, что массив данных в $webform_submission обновляется информацией, полученной для поиска по электронной почте.

Затем я поместил точки останова в функцию submitForm, чтобы проверить, что ей передается $webform_submission, и заметил, что все данные, которые были установлены в функции validateForm, были стерты.

публичная функция submitForm (массив и $ форма, FormStateInterface $ form_state, WebformSubmissionInterface $ webform_submission) {

  // Получить данные $webform_submission.
  $form_submission_data = $webform_submission->getData();

}

Количество вопросов

  1. Почему значения в $webform_submission сбрасываются между вызовами функций validateForm и submitForm?

  2. Является ли validateForm правильным местом для обновления значений полей формы?

  3. alterForm кажется более разумным местом для обновления/изменения значений полей формы, но я не был уверен, как подавить вызов alterForm, который выполняется всякий раз, когда я редактировал веб-форму при входе в Drupal.

Будем признательны за любую помощь или предложения.

флаг cn
Добро пожаловать в ответы Drupal. Пожалуйста, старайтесь задавать здесь только один вопрос в каждом посте. Причина в том, что если кто-то отвечает на ваш вопрос, вы можете «принять» этот ответ, но если человек А отвечает на вопрос 1, а человек Б отвечает на вопрос 2, уже не ясно, что следует принять.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.