Score:-2

องค์ประกอบฟิลด์ข้อความที่กำหนดเอง ค่า $form_state และค่าองค์ประกอบ '#value' ที่แตกต่างกัน

ธง cn

ฉันมีองค์ประกอบฟิลด์ข้อความ (ชื่อ 'bus_station') ซึ่งมีชื่อสถานีขนส่ง

ฉันกำลังมองหาวิธีสร้างองค์ประกอบ 'bus_station' ที่กำหนดเอง (อาจขยายคลาส Textfield) ซึ่งจะ:

  • ยังคงคาดว่าจะมีการป้อนข้อความในรูปแบบของชื่อสถานีขนส่ง (และคงไว้ในระหว่าง $form_state->setRebuild() และแสดงให้ผู้ใช้เห็น) แต่
  • ใน $form_valueหลังจากส่งแบบฟอร์มแล้ว ให้ระบุ a เท็จ (รหัสที่กำหนดเองในการกำหนดองค์ประกอบไม่รู้จักอินพุตเป็นสถานี) หรือ จริง (มันรู้จักสถานี)? หรือ Entity ID (ID ของสถานีขนส่งที่ตรงกัน) และ/หรือ โมฆะ (ไม่ตรงกัน)?
Score:0
ธง cn

ซึ่งสามารถทำได้ผ่านการใช้งานการเรียกกลับของ Form API:

ข้างใน module/src/Element/ElementClass.php, ใน ฟังก์ชั่นสาธารณะ getInfo() {} กำหนดการเรียกกลับ เช่น processMyElement ภายใต้ '#กระบวนการ' กุญแจ:

ฟังก์ชั่นสาธารณะ getInfo () {
  $คลาส = คงที่::คลาส;
  กลับ [
    // [...] คำจำกัดความอื่น ๆ
    '#กระบวนการ' => [
      [คลาส $, 'processMyElement'],
    ]
  ];
}

จากนั้นดำเนินการเสริมสองรายการ

(1) ประมวลผลข้อมูลที่ผู้ใช้ป้อนและส่งคืนค่าซึ่งจะระบุไว้ใน '#form_state' ค่าใน ค่าโทรกลับ () กระบวนการ:

ค่าฟังก์ชันคงที่สาธารณะ callback (&$ องค์ประกอบ $ อินพุต FormStateInterface $ form_state) {
  $output = parent::valueCallback($องค์ประกอบ, $อินพุต, $form_state);
  ถ้า ($ อินพุต == 'บางอย่าง') {
    $output = 'บางอย่าง_ELSE';
  }
  ส่งคืนเอาต์พุต $;
}

(2) และในทางกลับกันใน processMyElement() วิธีการคืนค่าเดิม:

ฟังก์ชั่นสาธารณะแบบคงที่ processMyElement (&$ element, FormStateInterface $form_state, &$ Complete_form) {
  ถ้า ($ element['#value'] == 'SOMETHING_ELSE') {
    $element['#value'] = 'บางอย่าง';
  }
  ส่งคืนองค์ประกอบ $;
}

ตัวอย่างการใช้งาน

ฉันใช้สิ่งนี้เพื่อขยาย Drupal\Core\Render\Element\Textfield คลาสร่วมกับ JS Storage Complete นั่นทำให้ฉันเติมข้อความอัตโนมัติ (โดยไม่ต้องใช้ URL โทรกลับ) การเติมข้อความอัตโนมัตินี้ส่งคืนรหัสเอนทิตีที่ได้รับจากการโหลดเอนทิตีตามป้ายกำกับที่ไม่ซ้ำกันภายใน ค่าโทรกลับ () วิธีการ แต่ผู้ใช้ยังคงแสดงด้วยการป้อนข้อความ (ได้รับจากการส่งคืน $entity->label() ข้างใน processMyElement() กระบวนการ).

โพสต์คำตอบ

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