ĐÃ GIẢI QUYẾT, cả hai phương pháp bên dưới đều hoạt động hoàn toàn tốt, đó chỉ là một lỗi đánh máy.
Tôi cần cập nhật cấu hình của trường theo chương trình trong hook_update
. Tôi cần thực hiện việc này trên nhiều dự án, vì vậy tôi không thể sử dụng cách thông thường với giao diện người dùng trường và đồng bộ hóa cấu hình. Tôi đã tìm thấy tài liệu về cách cập nhật lưu trữ trường và lược đồ DB (1, 2), nhưng không có tài liệu về cách chỉ cập nhật cấu hình trường, vì vậy tôi cho rằng mình có thể thực hiện cùng với ConfigFactory chung.
/**
* Thêm đoạn mới của tôi vào danh sách các gói được phép trong cấu hình trường máy chủ
*/
hàm MYMODULE_update_9001(&$sandbox) {
$config = \Drupal::configFactory()->getEditable('field.field.node.BUNDLE.FIELD_NAME');
$currentAllowedParagraphs = $config->get('settings.handler_settings.target_bundles');
if (!in_array('NEW_PARAGRAPH_BUNDLE', $currentAllowedParagraphs )) {
$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', ['enabled' => true, 'weight' => 1234]);
$config->save(TRUE);
}
}
Điều này chỉ hoạt động trong cấu hình hoạt động (drush cex
tạo cấu hình YAML dự kiến, cập nhật và chính xác), nhưng thật kỳ lạ là không ở bất kỳ nơi nào khác. Ví dụ. trong Giao diện người dùng trường hoặc trong biểu mẫu chỉnh sửa nút, mọi thứ hoạt động như cấu hình pre-hook cũ, nó không sử dụng cấu hình hoạt động. Tôi đã thử thực hiện nhiều lần nhập cấu hình và xóa bộ nhớ cache, nhưng trường này không sử dụng các giá trị từ ConfigFactory. Tôi hoàn toàn chắc chắn rằng cấu hình mới của mình là chính xác và đang hoạt động, nhưng bằng cách nào đó, trường hiện không đồng bộ với cấu hình của chính nó.
Cập nhật: Tôi cũng đã thử một cách tiếp cận khác bằng cách sử dụng FieldConfig, nhưng vấn đề hoàn toàn giống nhau: Cấu hình hoạt động phù hợp, nhưng không có tác dụng trong giao diện người dùng trường hoặc biểu mẫu chỉnh sửa nút.
/**
* Thêm chuyến tham quan vào các slide được phép trong DGM TV
*/
function wt_dgm_update_9011(&$sandbox) {
/** @var $config Drupal\field\FieldConfigInterface */
$config = Drupal\field\Entity\FieldConfig::loadByName('node', 'dgmtv', 'field_slides');
$handlerSettings = $config->getSetting('handler_settings');
$allowedParagraphs = $handlerSettings['target_bundles'];
if (!in_array('dgmtour', $allowedParagraphs)) {
$dependencies = $config->get('dependencies');
$dependencies['config'][] = 'paragraphs.paragraphs_type.dgmtour';
$config->set('phụ thuộc', $phụ thuộc);
$handlerSettings['target_bundles']['dgmtour'] = 'dgmtour';
$handlerSettings['target_bundles_drag_drop']['dgmtour'] = ['enabled' => true, 'weight' => 1234];
$settings = $config->get('settings');
$settings['handler_settings'] = $handlerSettings;
$config->set('settings', $settings);
$config->save();
}
}
Tôi cần làm gì khác để trường sử dụng cấu hình mới?