Mă confrunt cu o situație în care sper că cineva va putea oferi niște sfaturi și îndrumări în ceea ce privește abordarea mea care nu funcționează în acest moment.
Construim un formular web care conține un câmp de adresă de e-mail. Când utilizatorul completează acest câmp, îi luăm adresa de e-mail și facem o căutare a contului în cadrul funcției validateForm a operatorului nostru personalizat de formulare web.Trimiterea formularului nu este salvată în baza noastră de date.
Dacă utilizatorul are un cont asociat cu adresa de e-mail furnizată, luăm rezultatele și actualizăm numărul de câmpuri din $webform_submission astfel:
funcția publică validateForm(matrice &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
// Luați adresa de e-mail
$email_address = !empty($form_state->getValue('user_email'))? Html::escape($form_state->getValue('user_email')): NULL;
dacă (isset($adresă_e-mail)) {
// Luați înregistrarea de contact asociată cu e-mailul
$contact_record_obj = Utility::getContactObjFromEmailAddress($email_address);
if(isset($contact_record_obj)) {
// Actualizați datele $webform_submission
$webform_submission->setElementData("first_name", $contact_record_obj->firstName);
$webform_submission->setElementData(„nume”, $contact_record_obj->lastName);
$webform_submission->setElementData("business_phone", $contact_record_obj->businessPhone);
// Salvați datele $webform_submission?
$webform_submission->salvare();
}
}
}
Am plasat puncte de întrerupere pe fiecare linie în care este apelat setElementData și pot vedea că matricea de date din $webform_submission este actualizată cu informațiile preluate pentru căutarea de e-mail.
Apoi am plasat puncte de întrerupere în funcția submitForm pentru a verifica că $webform_submission îi este transmis și am observat că toate datele care au fost setate în funcția validateForm au fost șterse.
funcția publică submitForm(matrice &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {
// Preluați datele $webform_submission.
$form_submission_data = $webform_submission->getData();
}
Numărul de întrebări
De ce sunt resetate valorile din $webform_submission între apelurile funcțiilor validateForm și submitForm?
Este validateForm locul corect pentru a actualiza valorile câmpurilor formularului?
alterForm pare un loc mai rezonabil pentru a actualiza/modifica valorile câmpurilor de formular, dar nu eram sigur cum să suprim apelul alterForm efectuat de fiecare dată când am editat formularul web în timp ce eram conectat la Drupal.
Orice ajutor sau sugestie ar fi foarte apreciat.