Điểm:1

"event_subscriber" có phải là quy ước đặt tên dành riêng cho các dịch vụ không? Có hướng dẫn để làm theo?

lá cờ cn

Vì vậy, hôm nay tôi đang thực hiện một dự án và một người đăng ký sự kiện mà chúng tôi đã viết phần tốt hơn của một năm trước đã quyết định không kích hoạt nữa. Đây là định nghĩa:

dịch vụ:
  my_module.event_subscriber:
    lớp: Drupal\my_module\EventSubscriber\XYZFeeds
    thẻ:
      - { tên: event_subscriber }

Tôi đã thực hiện gỡ lỗi thông thường và thấy rằng sự kiện không được thêm vào sổ đăng ký. Gỡ lỗi thêm đã phát hiện ra rằng có tên chứa event_subscriber đã khiến nó không được chọn. Nếu tôi thay đổi nó thành bất kỳ thứ gì khác thì nó sẽ hoạt động, ví dụ:

dịch vụ:
  my_module.my_module_xyz_subscriber:
    lớp: Drupal\my_module\EventSubscriber\XYZFeeds
    thẻ:
      - { tên: event_subscriber }

Tôi không thể tìm thấy bất kỳ tài liệu nào tuyên bố rõ ràng rằng bạn không thể sử dụng cụm từ đó trong tên dịch vụ. Quy ước duy nhất mà tôi biết là luôn đặt tiền tố tên dịch vụ bằng mô-đun mà nó xuất phát.

Có điều gì đó đã thay đổi từ D8 thành D9 hay điều này đến từ các thành phần Symfony Framework là một phần của Drupal?

Jaypan avatar
lá cờ de
Tuyên bố dịch vụ của bạn trông như thế nào?
lá cờ cn
@Jaypan đã cập nhật câu hỏi với các đoạn mã trước/sau.
4uk4 avatar
lá cờ cn
`my_module.event_subscriber` có thể được đặt trước vì nó đã được sử dụng.
Điểm:2
lá cờ cn

Nó dường như không được bảo lưu/không được phép bởi Drupal hoặc Symfony - điều này hoạt động tốt với tôi trong 9.3.13 sau khi thêm mã và xây dựng lại bộ đệm (không có bước bổ sung):

custom_module.services.yml

dịch vụ:
  custom_module.event_subscriber:
    lớp: Drupal\custom_module\EventSubscriber\XYZFeeds
    thẻ:
      - { tên: event_subscriber }

src/EventSubscriber/XYZFeeds.php

<?php

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 Symfony\Component\EventDispatcher\EventSubscriberInterface;

lớp XYZFeeds triển khai EventSubscriberInterface {

  hàm tĩnh công khai getSubscribeEvents() {
    trở lại [
      Sự kiện cấu hình::SAVE => 'configSave',
      Sự kiện cấu hình::DELETE => 'configDelete',
    ];
  }


  chức năng công khai configSave(ConfigCrudEvent $event) {
    $config = $event->getConfig();
    \Drupal::messenger()->addStatus('Cấu hình đã lưu: ' . $config->getName());
  }

  chức năng công khai configDelete(ConfigCrudEvent $event) {
    $config = $event->getConfig();
    \Drupal::messenger()->addStatus('Đã xóa cấu hình: ' . $config->getName());
  }

}

Điều này tạo ra các thông báo dự kiến ​​khi lưu/xóa cấu hình, vì vậy có vẻ như sự cố của bạn là một vấn đề cục bộ hơn.

Một ý tưởng để gỡ lỗi thêm xuất hiện trong đầu là kiểm tra xem bạn có mã tùy chỉnh (hoặc thậm chí là đóng góp) nào đang làm thay đổi dịch vụ hay không, thậm chí có thể xóa mã đó. Điều này có thể được thực hiện bằng cách sử dụng một nhà cung cấp dịch vụ, do đó grep-ing các thư mục có liên quan cho Nhà cung cấp dịch vụ có thể là một bước đầu tiên.

Bạn cũng nên thử thay đổi phần đầu tiên của ID thay vì phần thứ hai, để xem có thực sự đúng như vậy không. event_subscriber điều đó gây ra sự cố hoặc toàn bộ chuỗi:

dịch vụ:
  my_module_test.event_subscriber:
    lớp: Drupal\my_module\EventSubscriber\XYZFeeds
    thẻ:
      - { tên: event_subscriber }

Nếu phiên bản thay đổi hoạt động với .event_subscriber, ít nhất bạn đã loại trừ đó là vấn đề.

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