Я сталкиваюсь с ситуацией, и я надеюсь, что кто-то сможет дать несколько советов и рекомендаций, поскольку мой подход в данный момент не работает.
Мы создаем веб-форму, содержащую поле адреса электронной почты. Когда пользователь заполняет это поле, мы берем его адрес электронной почты и выполняем поиск учетной записи в функции 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();
}
Количество вопросов
Почему значения в $webform_submission сбрасываются между вызовами функций validateForm и submitForm?
Является ли validateForm правильным местом для обновления значений полей формы?
alterForm кажется более разумным местом для обновления/изменения значений полей формы, но я не был уверен, как подавить вызов alterForm, который выполняется всякий раз, когда я редактировал веб-форму при входе в Drupal.
Будем признательны за любую помощь или предложения.