Điểm:1

Lập trình cập nhật cấu hình trường (không lưu trữ)

lá cờ ru

ĐÃ 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?

4uk4 avatar
lá cờ cn
Có lý do nào khiến bạn tải cấu hình trường thông qua nhà máy cấu hình không? Có thể cần thiết nếu cấu hình của bạn chứa các ngôn ngữ gốc hỗn hợp. Nếu bạn không gặp sự cố này thì hãy thử tải cấu hình trực tiếp qua `FieldConfig::loadByName()`.
lá cờ ru
Cá nhân tôi thấy `ConfigFactory` thoải mái hơn nhiều khi làm việc vì nó cho phép thao tác trực tiếp với `$config->get('very.deep.nested.settings')` và nó hoạt động với mọi cấu hình. Đã thử với `FieldConfig`, vấn đề tương tự.
lá cờ ru
Chúa ơi, đó chỉ là một lỗi đánh máy với kỹ năng ẩn nấp cấp ninja: Nội dung liên quan cốt lõi là chính xác, nhưng tôi đã gặp lỗi trong phần liên quan đến trường Đoạn văn của tiện ích con của cấu hình.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.