Điểm:0

Làm cách nào để sử dụng các phương thức từ lớp thực thể nếu nó không có dịch vụ như vậy?

lá cờ ng

Tôi đang viết một EventSubscriber cho thực thể cấu hình của mô-đun miền. Mục tiêu của tôi là chèn một số dữ liệu vào cấu hình của nó trong sự kiện preSave (nó trở thành từ bản vá cho D9).

Đây là mã của tôi từ lớp ConfigEventSubscriber của mô-đun tùy chỉnh của tôi:


không gian tên Drupal\custom_module\EventSubscriber;

sử dụng Drupal\Core\Config\ConfigCrudEvent;
sử dụng Drupal\Core\Config\ConfigEvents;
sử dụng Drupal\domain\Entity\Domain;
sử dụng Symfony\Component\EventDispatcher\EventSubscriberInterface;

 lớp ConfigEventSubscriber triển khai EventSubscriberInterface {

   chức năng công khai __construct (Miền $ tên miền) {
     $this->miền = $miền;
   }
   /**
   * {@inheritdoc}
   *
   * @return mảng
   * Tên sự kiện cần lắng nghe và các phương thức sẽ được thực thi.
   */
  hàm tĩnh công khai getSubscribeEvents() {
    trở lại [
      Sự kiện cấu hình::PRESAVE => 'configPreSave'
    ];
  }

  /**
   * Phản ứng với một đối tượng cấu hình đang được lưu.
   *
   * @param \Drupal\Core\Config\ConfigCrudEvent $event
   * Cấu hình sự kiện thô sơ.
   */
  chức năng công khai configPreSave(ConfigCrudEvent $event) {
    $config = $event->getConfig();
    $domain_id = $config->getOriginal('id');
    if ($config->getStorage()->listAll('domain.record.')) {
      $this->domain->addDependencyTrait('module', 'country_path');
      $this->domain->setThirdPartySetting('country_path', 'domain_path', $domain_id);
    }
  }
 }

Đây là tập tin services.yml của tôi:

dịch vụ:
  Drupal\custom_module\EventSubscriber\ConfigEventSubscriber:
    thẻ:
      - { tên: 'event_subscriber' }
    đối số: ['@domain.element_manager']

Nó đưa ra một lỗi mà phiên bản DomainElementManager đã cung cấp, nhưng thực thể Miền được mong đợi và nó hợp lý, theo như tôi bao gồm phiên bản $domain của Miền trong cấu trúc của mình. Nhưng, tôi cần lớp Miền để sử dụng các phương thức sau:

addDependency, setThirdPartySettings.

Vì vậy, câu hỏi của tôi là làm thế nào để sử dụng các phương pháp này một cách chính xác trong ngữ cảnh nhiệm vụ của tôi?

Bất kỳ trợ giúp được đánh giá cao.

beltouche avatar
lá cờ cn
Nếu bạn không thể nhận Miền trực tiếp dưới dạng dịch vụ, bạn có thể nhận từ một dịch vụ hiện có không? Ví dụ: nếu trình quản lý miền có phương thức `getDomain()`, bạn có thể viết lại lớp của mình để thêm trình quản lý và rút Miền trong hàm tạo.
Yaroslav avatar
lá cờ ng
Thật không may, nó không có một phương pháp như vậy. Phương thức này tồn tại trong DomainAliasInterface, nhưng nó cũng không được khai báo trong services.yml của mô-đun.
4uk4 avatar
lá cờ cn
Ngay cả khi bạn không có phương thức của thực thể miền được tải đầy đủ, bạn vẫn có thể lấy và đặt tất cả cài đặt cấu hình, kể cả cài đặt của bên thứ ba: `$config->get('third_party_settings')`
Yaroslav avatar
lá cờ ng
Cảm ơn, nó đã giúp tôi rất nhiều. Tôi đã sử dụng phương thức $config->set() và đẩy dữ liệu cần thiết.

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