ฉันกำลังประสบกับสถานการณ์ที่ฉันหวังว่าจะมีคนสามารถให้คำแนะนำและแนวทางบางอย่างได้เนื่องจากแนวทางของฉันไม่ได้ผลในขณะนี้
เรากำลังสร้างเว็บฟอร์มที่มีฟิลด์ที่อยู่อีเมล เมื่อผู้ใช้กรอกข้อมูลในฟิลด์นี้ เราจะใช้ที่อยู่อีเมลของพวกเขาและทำการค้นหาบัญชีภายในฟังก์ชันตรวจสอบความถูกต้องของโปรแกรมจัดการเว็บฟอร์มที่กำหนดเองของเราการส่งแบบฟอร์มไม่ได้บันทึกไว้ในฐานข้อมูลของเรา
หากผู้ใช้มีบัญชีที่เชื่อมโยงกับที่อยู่อีเมลที่ให้ไว้ เราจะนำผลลัพธ์และอัปเดตจำนวนฟิลด์ภายใน $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();
}
จำนวนคำถาม
เหตุใดค่าภายใน $webform_submission จึงถูกรีเซ็ตระหว่างการเรียกใช้ฟังก์ชัน validateForm และ submitForm
ValidateForm เป็นสถานที่ที่ถูกต้องในการอัปเดตค่าฟิลด์ของฟอร์มหรือไม่
alterForm ดูเหมือนจะเป็นสถานที่ที่เหมาะสมกว่าในการอัปเดต/เปลี่ยนแปลงค่าฟิลด์ของฟอร์ม แต่ฉันไม่แน่ใจว่าจะระงับการเรียก alterForm ได้อย่างไร เมื่อฉันแก้ไขเว็บฟอร์มในขณะที่ลงชื่อเข้าใช้ Drupal
ความช่วยเหลือหรือข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมอย่างมาก