Score:0

หลังจากแสดงแบบฟอร์มเอนทิตีแล้ว จะแก้ไขได้อย่างไร

ธง br

ฉันแสดงฟอร์มเอนทิตีแบบกำหนดเองที่แสดงด้วยรหัสต่อไปนี้:

$form = $this->entityFormBuilder->getForm($entity, 'array_delimiter');

มันสมบูรณ์แบบเพราะมันแสดงสิ่งที่ฉันตั้งไว้ในการแสดงแบบฟอร์ม อย่างไรก็ตาม เมื่อฉันพยายามเพิ่มฟังก์ชันเรียกกลับส่งใหม่ (เช่น $form['actions']['submit']['#submit'][] = 'custom_callback';) อย่างนี้ไม่ถูกเรียก
เมื่อฉันพยายามซ่อนรายการฟอร์มบางอย่าง ข้อมูลของรายการเหล่านั้นจะหายไป (เช่น. $form['status']['#access'] = FALSE;).

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

มีวิธีการทำเช่นนี้โดยไม่ต้องเสริม hook_form_FORM_ID_alter?

Kevin avatar
in flag
คุณไม่สามารถเพิ่มได้เนื่องจากฟังก์ชันตัวสร้างไม่ทราบเกี่ยวกับรหัสที่คุณเพิ่ม ดังนั้นคุณต้องมีตะขอเกี่ยว
Jaypan avatar
de flag
ควรทำใน form_alter hook
br flag
ไม่ ฉันไม่ต้องการ form_alter ฉันแค่ต้องขยายออบเจกต์การเรนเดอร์ฟอร์มและตั้งค่าทุกอย่างที่นั่นและให้สิ่งนั้นแทนของเดิมเมื่อฉันตั้งค่าออบเจกต์เรนเดอร์สำหรับการแสดงผล `array_delimiter`
Kevin avatar
in flag
คุณไม่ได้พูดถึงเรื่องนั้น
Score:1
ธง cn

แบบฟอร์มจะแสดงในสามขั้นตอน:

  1. โครงสร้างของแบบฟอร์มถูกสร้างขึ้นมา FormInterface::buildForm. ผลลัพธ์สามารถเปลี่ยนแปลงได้ใน hook_form_alter()

  2. เดอะ องค์ประกอบของแบบฟอร์ม กำลังประมวลผล สามารถส่งได้เฉพาะองค์ประกอบของแบบฟอร์มที่ดำเนินการแล้วเท่านั้น

  3. อาร์เรย์การเรนเดอร์สุดท้ายของฟอร์มถูกเรนเดอร์

แม้จะมีชื่อ ตัวสร้างแบบฟอร์ม ไม่เพียงแต่สร้างองค์ประกอบฟอร์ม แต่ยังประมวลผลเพื่อให้พร้อมที่จะแสดงผล องค์ประกอบแบบฟอร์มที่ซับซ้อนมากขึ้นต้องใช้ขั้นตอนนี้ เนื่องจากโครงสร้างการเรนเดอร์ขั้นสุดท้ายสร้างขึ้นใน #กระบวนการเรียกกลับ แต่แม้แต่องค์ประกอบแบบฟอร์มธรรมดาที่แสดงผลได้ดีโดยไม่มีการประมวลผลก็ไม่สามารถส่งได้

br flag
Aha ดังนั้นวิธีแก้ปัญหาเดียวสำหรับสิ่งนี้คือการขยายคลาสแบบฟอร์มดั้งเดิม และแทนที่จะให้วัตถุแบบฟอร์มดั้งเดิมเป็นวัตถุเรนเดอร์ ฉันให้แบบฟอร์มเพิ่มเติม ดังนั้นจุดที่ 2 และ 3 ยังไม่ทำงานเมื่อฉันเปลี่ยนค่าบางอย่างของแบบฟอร์ม
br flag
ใช่ และใช้งานได้ เพราะอย่างไรก็ตาม ฉันต้องกำหนดวัตถุเรนเดอร์ของการแสดงฟอร์มใหม่ ฉันสามารถขยายวัตถุที่มีอยู่แล้วเพื่อเพิ่มการเรียกกลับและฟิลด์พิเศษได้ เช่นนี้ไม่มีรหัสสุ่มทุกที่
4uk4 avatar
cn flag
ใช่ นี่เป็นวิธีที่ตรงไปตรงมาที่สุด ตั้งค่าคลาสฟอร์มแบบขยายเป็นตัวจัดการฟอร์มในหมายเหตุประกอบประเภทเอนทิตี

โพสต์คำตอบ

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