แก้ไขแล้ว ทั้งสองวิธีด้านล่างทำงานได้ดีอย่างสมบูรณ์ มันเป็นเพียงการพิมพ์ผิด
ฉันจำเป็นต้องอัปเดตการกำหนดค่าของฟิลด์โดยทางโปรแกรม hook_update
. ฉันต้องทำสิ่งนี้ในหลายโปรเจ็กต์ ดังนั้นฉันจึงไม่สามารถใช้วิธีปกติกับ field UI และการซิงค์การกำหนดค่าได้ ฉันพบเอกสารวิธีการอัปเดตที่เก็บข้อมูลฟิลด์และ DB schema (1, 2) แต่ไม่มีเอกสารเกี่ยวกับวิธีอัปเดตการกำหนดค่าฟิลด์เท่านั้น ดังนั้นฉันจึงคิดว่าฉันสามารถใช้ ConfigFactory ทั่วไปได้
/**
* เพิ่มย่อหน้าใหม่ของฉันในรายการบันเดิลที่อนุญาตในการกำหนดค่าฟิลด์โฮสต์
*/
ฟังก์ชัน MYMODULE_update_9001(&$แซนด์บ็อกซ์) {
$config = \Drupal::configFactory()->getEditable('field.field.node.BUNDLE.FIELD_NAME');
$existingAllowedParagraphs = $config->get('settings.handler_settings.target_bundles');
ถ้า (!in_array('NEW_PARAGRAPH_BUNDLE', $existingAllowedParagraphs )) {
$dependencies = $config->get('dependencies.config');
$dependencies[] = 'paragraphs.paragraphs_type.NEW_PARAGRAPH_BUNDLE';
$config->set('dependencies.config', $dependencies);
$config->set('settings.handler_settings.target_bundles.NEW_PARAGRAPH_BUNDLE', 'NEW_PARAGRAPH_BUNDLE');
$config->set('settings.handler_settings.target_bundles_drag_drop.NEW_PARAGRAPH_BUNDLE', ['เปิดใช้งาน' => จริง, 'น้ำหนัก' => 1234]);
$config->save(จริง);
}
}
สิ่งนี้ใช้ได้เฉพาะในการกำหนดค่าที่ใช้งานอยู่ (ดรัชซีเอ็กซ์
สร้างการกำหนดค่า YAML ที่คาดไว้ อัปเดตและถูกต้อง) แต่แปลกที่ไม่มีที่อื่น เช่น. ใน Field UI หรือในแบบฟอร์มแก้ไขโหนด ทุกอย่างทำงานเหมือนเก่า กำหนดค่าก่อนฮุค ไม่ใช้การกำหนดค่าที่ใช้งานอยู่ ฉันได้ลองนำเข้าการกำหนดค่าและล้างแคชหลายครั้ง แต่ฟิลด์นี้ไม่ได้ใช้ค่าจาก ConfigFactory ฉันแน่ใจอย่างยิ่งว่าการกำหนดค่าใหม่ของฉันถูกต้องและใช้งานได้ แต่อย่างใด ฟิลด์นี้ไม่ซิงค์กับการกำหนดค่าของตัวเอง
อัปเดต: ฉันได้ลองวิธีอื่นโดยใช้ FieldConfig แล้ว แต่ปัญหาก็เหมือนกันทุกประการ: การกำหนดค่าที่ใช้งานอยู่เหมาะสม แต่ไม่มีผลกระทบใน UI ของฟิลด์หรือรูปแบบการแก้ไขโหนด
/**
* เพิ่มทัวร์ชมสไลด์ที่อนุญาตใน DGM TV
*/
ฟังก์ชัน wt_dgm_update_9011(&$แซนด์บ็อกซ์) {
/** @var $config Drupal\field\FieldConfigInterface */
$config = Drupal\field\Entity\FieldConfig::loadByName('โหนด', 'dgmtv', 'field_slides');
$handlerSettings = $config->getSetting('handler_settings');
$allowedParagraphs = $handlerSettings['target_bundles'];
ถ้า (!in_array('dgmtour', $allowedParagraphs)) {
$dependencies = $config->get('การพึ่งพา');
$dependencies['config'][] = 'paragraphs.paragraphs_type.dgmtour';
$config->set('การพึ่งพา', $การพึ่งพา);
$handlerSettings['target_bundles']['dgmtour'] = 'dgmtour';
$handlerSettings['target_bundles_drag_drop']['dgmtour'] = ['เปิดใช้งาน' => จริง, 'น้ำหนัก' => 1234];
$settings = $config->get('การตั้งค่า');
$settings['handler_settings'] = $handlerSettings;
$config->set('การตั้งค่า', $settings);
$config->save();
}
}
ฉันต้องทำอะไรอีกเพื่อให้ฟิลด์ใช้การกำหนดค่าใหม่