Score:1

ฉันจะตั้งค่าเริ่มต้นสำหรับฟิลด์อ้างอิงเอนทิตีผู้ใช้ใน hook_form_alter() ได้อย่างไร

ธง us
CKL

ฉันลองรหัสต่อไปนี้ แต่มันไม่ทำงาน

$form['field_name']['widget'][0]['target_id']['#default_value'] = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id( ));
Score:1
ธง us

วิดเจ็ตเริ่มต้นที่ใช้สำหรับฟิลด์อ้างอิงเอนทิตี (ยกเว้นฟิลด์อ้างอิงเอนทิตีสำหรับแท็กการจัดหมวดหมู่) ถูกนำมาใช้โดย EntityReferenceAutocompleteWidget คลาสซึ่งในนั้น formElement() การดำเนินการส่งกลับองค์ประกอบแบบฟอร์มต่อไปนี้

$องค์ประกอบ += [
  '#type' => 'entity_autocomplete',
  '#target_type' => $this->getFieldSetting('target_type'),
  '#selection_handler' => $this->getFieldSetting('ตัวจัดการ'),
  '#selection_settings' => $selection_settings,
  // รายการฟิลด์อ้างอิงเอนทิตีกำลังจัดการการตรวจสอบตัวเองผ่าน
  // ข้อจำกัด 'ValidReference'
  '#validate_reference' => เท็จ
  '#maxlength' => 1024,
  '#default_value' => isset($referenced_entities[$delta]) ? $referenced_entities[$delta] : NULL,
  '#size' => $this->getSetting('ขนาด'),
  '#placeholder' => $this->getSetting('ตัวยึด'),
];

แทน แบบฟอร์ม['field_name']['widget'][0]['target_id']['#default_value']ควรตั้งรหัส แบบฟอร์ม['field_name']['widget'][0]['#default_value'].

แบบฟอร์ม['field_name']['widget'][0]['#default_value'] = \Drupal\user\Entity\User::load(\Drupal::currentUser()->id());

ตามหมายเหตุด้านข้าง หากต้องการเปลี่ยนองค์ประกอบฟอร์มที่ส่งคืนจากวิดเจ็ตฟิลด์ Drupal จะทำ hook_field_widget_complete_form_alter() (และ hook_field_widget_complete_WIDGET_TYPE_form_alter()) ใช้ได้เพื่อการนี้ สามารถเข้าถึงข้อมูลต่อไปนี้

  • อินสแตนซ์ปลั๊กอินวิดเจ็ต ($บริบท['วิดเจ็ต']) ซึ่งอนุญาตให้เข้าถึง ID วิดเจ็ต (ตัวอย่างเช่น เอนทิตี_reference_เติมข้อความอัตโนมัติ, entity_reference_autocomplete_tags) กับ $context['widget']->getPluginId()
  • ค่าฟิลด์ ($บริบท['รายการ']) ซึ่งอนุญาตให้รับประเภทเป้าหมายของฟิลด์อ้างอิง ($context['items']->getFieldDefinition()->getFieldStorageDefinition()->getSetting('target_type')) หรือประเภทฟิลด์ ($context['items']->getFieldDefinition()->getType()), ตัวอย่างเช่น

เมื่อเป็นไปได้ ควรใช้ hook นี้สำหรับวิดเจ็ตฟิลด์แทน hook_form_alter().

media_field_widget_complete_form_alter() เป็นการดำเนินการของ hook ที่ทำโดยโมดูลสื่อ

โพสต์คำตอบ

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