Puncte:0

actualizarea valorilor $webform_submission în funcția alterForm a unui handler personalizat de formulare web

drapel in

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

  1. De ce sunt resetate valorile din $webform_submission între apelurile funcțiilor validateForm și submitForm?

  2. Este validateForm locul corect pentru a actualiza valorile câmpurilor formularului?

  3. 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.

drapel cn
Bun venit la Drupal Answers. Vă rugăm să încercați să puneți o singură întrebare pe post aici. Motivul pentru care este că, dacă cineva îți răspunde la întrebare, poți „accepta” acel răspuns, dar dacă persoana A răspunde la întrebarea 1 și persoana B răspunde la întrebarea 2, nu mai este clar ce ar trebui acceptat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.