Điểm:-1

Nội xạ phụ thuộc trong phương thức tạo () của plugin khối có dẫn xuất

lá cờ us

Tôi đang cố gắng mở rộng menu_block mô-đun để cho phép nó hoạt động với các miền (thông qua miền mô-đun). Để làm được điều này, tôi đang mở rộng Thực đơnKhối lớp và cố gắng truy cập vào domain.negotiator dịch vụ từ bên trong getDerivativeID(). tôi đang sử dụng tạo ra() phương pháp để tiêm dịch vụ và lưu trữ nó vào một $domainNhà đàm phán tài sản như sau:

  tạo hàm tĩnh công khai (ContainerInterface $container, mảng $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->domainNegotiator = $container->get('domain.negotiator');
    trả lại cá thể $;
  }

Khi tôi cố gắng gọi $this->domainNegotiator từ bên trong getDerivativeID() Tôi gặp lỗi cho biết thuộc tính không tồn tại và do đó tôi không thể truy cập các phương thức trên đó. Khi gỡ lỗi, tôi có thể theo dõi vấn đề MenuBlock::defaultConfiguration() kêu gọi $this->getDerivativeID().

Cấu hình mặc định được đặt trong __xây dựng() phía trong KhốiPluginTrait (được gọi vào Khối cơ sở), vì vậy cuối cùng nó dẫn đến việc được gọi trong lớp của tôi tạo ra() phương pháp.

Tôi có thể khắc phục sự cố này bằng cách sử dụng phiên bản dịch vụ không được tiêm trong getDerivativeID() phương pháp, tuy nhiên đây không phải là một phương pháp hay:

$active_domain = \Drupal::service('domain.negotiator')->getActiveDomain();

Có cách nào để chèn các phụ thuộc để chúng có sẵn trước khi gọi không cha mẹ::tạo() trong lớp học của tôi tạo ra() phương pháp?

lá cờ cn
Đơn giản nhất có lẽ là làm những gì cốt lõi làm khi không chắc liệu một dịch vụ đã được đưa vào hay chưa, ví dụ: [`ControllerBase::entityTypeManager()`](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Controller%21ControllerBase.php/function/ControllerBase%3A%3AentityTypeManager/9.3.x )
Điểm:3
lá cờ cn

Hệ thống plugin Drupal có bốn cấp độ. Định nghĩa plugin, dẫn xuất, cấu hình và cuối cùng là phiên bản thời gian chạy.

Như bạn có thể thấy trong thông báo lỗi của mình, bạn định cấu hình định nghĩa plugin cụ thể hoặc dẫn xuất của định nghĩa plugin. Định nghĩa này là tĩnh và bạn không thể thay đổi nó sau khi đã cấu hình nó.

Chỉ phiên bản thời gian chạy của plugin mới có thể phản ứng trong các điều kiện động như miền đang hoạt động.

Điểm:1
lá cờ us

Tôi đã không thể tìm ra cách mở rộng Thực đơnKhối chỉ sử dụng tạo ra(). tôi đã phải thay đổi thành một __xây dựng()tạo ra() hệ thống, và trở lại tĩnh() từ bên trong tạo ra() trong khi tiêm thủ công các phụ thuộc từ cả hai Thực đơnKhốiHệ thốngMenuKhối các lớp học. Điều này kém mạnh mẽ hơn một chút ở chỗ nó sẽ bị hỏng nếu Thực đơnKhối lớp luôn thay đổi các phụ thuộc, tuy nhiên, nó vẫn hoàn thành hành vi dự định là sử dụng một phụ thuộc được đưa vào bên trong getDerivitiveId():

  chức năng công khai __construct(mảng $configuration, $plugin_id, $plugin_definition, MenuLinkTreeInterface $menu_tree, MenuActiveTrailInterface $menu_active_trail, MenuParentFormSelectorInterface $menu_parent_form_selector, EntityTypeManagerInterface $entity_type_manager, DomainNegotiatorInterface $domain_negotiator) {
    $this->domainNegotiator = $domain_negotiator;
    $this->menuParentFormSelector = $menu_parent_form_selector;
    $this->entityTypeManager = $entity_type_manager;
    cha mẹ::__construct($configuration, $plugin_id, $plugin_definition, $menu_tree, $menu_active_trail);
  }

  tạo hàm tĩnh công khai (ContainerInterface $container, mảng $configuration, $plugin_id, $plugin_definition) {
    trả về tĩnh mới (
      cấu hình $,
      $plugin_id,
      $plugin_definition,
      $container->get('menu.link_tree'),
      $container->get('menu.active_trail'),
      $container->get('menu.parent_form_selector'),
      $container->get('entity_type.manager'),
      $container->get('domain.negotiator'));
  }

Đă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.