Điểm:4

non-existent service, yet cache is cleared and module is enabled

lá cờ ca

I'm trying to access a Drupal service for normalizing content, yet the service is non-existent, even though the module "hal" is enabled and the service is defined. How can I get the service "serializer.normalizer.entity.hal"?

root@0968b6d03cdb:/var/www/html# drush cr
 [success] Cache rebuild complete.

root@0968b6d03cdb:/var/www/html# drush pml|grep hal
  Web services                      HAL (hal)                                               Enabled    9.3.0           

root@0968b6d03cdb:/var/www/html# drush ev "\Drupal::service('serializer.normalizer.entity.hal');"

In Container.php line 156:
                                                                                 
  You have requested a non-existent service "serializer.normalizer.entity.hal".  
                                                                                 
root@0968b6d03cdb:/var/www/html# cat core/modules/hal/hal.services.yml
services:
  serializer.normalizer.entity_reference_item.hal:
    class: Drupal\hal\Normalizer\EntityReferenceItemNormalizer
    arguments: ['@hal.link_manager', '@serializer.entity_resolver', '@entity_type.manager']
    tags:
      - { name: normalizer, priority: 10 }
  serializer.normalizer.field_item.hal:
    class: Drupal\hal\Normalizer\FieldItemNormalizer
    tags:
      - { name: normalizer, priority: 10 }
  serializer.normalizer.field.hal:
    class: Drupal\hal\Normalizer\FieldNormalizer
    tags:
      - { name: normalizer, priority: 10 }
  serializer.normalizer.file_entity.hal:
    class: Drupal\hal\Normalizer\FileEntityNormalizer
    arguments: ['@entity_type.manager', '@hal.link_manager', '@module_handler', '@config.factory', '@entity_type.repository', '@entity_field.manager']
    tags:
      - { name: normalizer, priority: 20 }
  serializer.normalizer.timestamp_item.hal:
   class: Drupal\hal\Normalizer\TimestampItemNormalizer
   tags:
     # Priority must be higher than serializer.normalizer.field_item.hal.
     - { name: normalizer, priority: 20 }
  serializer.normalizer.entity.hal:
    class: Drupal\hal\Normalizer\ContentEntityNormalizer
    arguments: ['@hal.link_manager', '@entity_type.manager', '@module_handler', '@entity_type.repository', '@entity_field.manager']
    tags:
      - { name: normalizer, priority: 10 }
  serializer.encoder.hal:
    class: Drupal\hal\Encoder\JsonEncoder
    tags:
      - { name: encoder, priority: 10, format: hal_json }

  # Link managers.
  hal.link_manager:
    class: Drupal\hal\LinkManager\LinkManager
    arguments: ['@hal.link_manager.type', '@hal.link_manager.relation']
  hal.link_manager.type:
    class: Drupal\hal\LinkManager\TypeLinkManager
    arguments: ['@cache.default', '@module_handler', '@config.factory', '@request_stack', '@entity_type.bundle.info', '@entity_type.manager']
  hal.link_manager.relation:
    class: Drupal\hal\LinkManager\RelationLinkManager
    arguments: ['@cache.default', '@entity_type.manager', '@module_handler', '@config.factory', '@request_stack', '@entity_type.bundle.info', '@entity_field.manager']

I can get other services, just not the "hal" one I want. For example, drush ev '\Drupal::service("node.node_route_context");' works fine.

Điểm:6
lá cờ bd

Bạn không thể tải trực tiếp vì các dịch vụ chuẩn hóa là riêng tư kể từ Drupal 8.6, hãy xem https://www.drupal.org/node/2936397:

Việc sử dụng trực tiếp các dịch vụ bộ mã hóa/chuẩn hóa không được hỗ trợ, người ta phải sử dụng dịch vụ @serializer, sau đó dịch vụ này sẽ gọi các dịch vụ mã hóa/chuẩn hóa thích hợp. Các dịch vụ có thẻ chuẩn hóa hoặc mã hóa thực sự là chi tiết triển khai nội bộ/riêng tư để đạt đến đỉnh cao trong dịch vụ @serializer đang hoạt động. Đây không bao giờ là API. Họ triển khai API "Serializer component" của Symfony.

Đây cũng là lý do tại sao dịch vụ không được liệt kê khi xem tất cả các dịch vụ có sẵn:

/var/www/html# gỡ lỗi drupal:container | grep 'hal'
hal.link_manager Drupal\hal\LinkManager\LinkManager                                        
hal.link_manager.relation Drupal\hal\LinkManager\RelationLinkManager                                
hal.link_manager.type Drupal\hal\LinkManager\TypeLinkManager  

Như bạn có thể thấy, không có dịch vụ nào từ lõi/mô-đun/hal/hal.service.yml, được gắn thẻ là bình thường hóa được liệt kê.

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