Score:0

อัปเดตค่า $webform_submission ในฟังก์ชัน alterForm ของตัวจัดการเว็บฟอร์มที่กำหนดเอง

ธง in

ฉันกำลังประสบกับสถานการณ์ที่ฉันหวังว่าจะมีคนสามารถให้คำแนะนำและแนวทางบางอย่างได้เนื่องจากแนวทางของฉันไม่ได้ผลในขณะนี้

เรากำลังสร้างเว็บฟอร์มที่มีฟิลด์ที่อยู่อีเมล เมื่อผู้ใช้กรอกข้อมูลในฟิลด์นี้ เราจะใช้ที่อยู่อีเมลของพวกเขาและทำการค้นหาบัญชีภายในฟังก์ชันตรวจสอบความถูกต้องของโปรแกรมจัดการเว็บฟอร์มที่กำหนดเองของเราการส่งแบบฟอร์มไม่ได้บันทึกไว้ในฐานข้อมูลของเรา

หากผู้ใช้มีบัญชีที่เชื่อมโยงกับที่อยู่อีเมลที่ให้ไว้ เราจะนำผลลัพธ์และอัปเดตจำนวนฟิลด์ภายใน $webform_submission ดังนี้:

ฟังก์ชันสาธารณะ validateForm (อาร์เรย์ &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission) {

  // หยิบที่อยู่อีเมล
  $email_address = !empty($form_state->getValue('user_email')) ? Html::escape($form_state->getValue('user_email')): NULL;

  ถ้า (isset($email_address)) {

    // หยิบบันทึกการติดต่อที่เกี่ยวข้องกับอีเมล
    $contact_record_obj = ยูทิลิตี้::getContactObjFromEmailAddress($email_address);

    ถ้า (isset ($ contact_record_obj)) {

      // อัปเดตข้อมูล $webform_submission
      $webform_submission->setElementData("ชื่อแรก", $contact_record_obj->ชื่อแรก);
      $webform_submission->setElementData("last_name", $contact_record_obj->lastName);
      $webform_submission->setElementData("business_phone", $contact_record_obj->businessPhone);

      // บันทึกข้อมูล $webform_submission?
      $webform_submission->save();

    }
  }
}

ฉันได้วางจุดพักไว้ในแต่ละบรรทัดที่มีการเรียก setElementData และฉันเห็นว่าอาร์เรย์ข้อมูลภายใน $webform_submission กำลังได้รับการอัปเดตด้วยข้อมูลที่ดึงมาสำหรับการค้นหาอีเมล

จากนั้นฉันวางเบรกพอยต์ในฟังก์ชัน submitForm เพื่อตรวจสอบ $webform_submission ที่กำลังส่งผ่านไป และฉันสังเกตเห็นว่าข้อมูลทั้งหมดที่ตั้งค่าภายในฟังก์ชัน validateForm ถูกลบออกไป

ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ & $form, 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 flag
ยินดีต้อนรับสู่คำตอบของ Drupal โปรดลองถามคำถามเดียวต่อโพสต์ที่นี่ เหตุผลคือถ้ามีคนตอบคำถามของคุณ คุณสามารถ "ยอมรับ" คำตอบนั้นได้ แต่ถ้าบุคคล A ตอบคำถาม 1 และบุคคล B ตอบคำถาม 2 ก็ไม่ชัดเจนอีกต่อไปว่าควรยอมรับอะไร

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา