Score:4

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

ธง 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.

Score:6
ธง bd

คุณไม่สามารถรับได้โดยตรงเนื่องจากบริการ Normalizer เป็นส่วนตัวตั้งแต่ Drupal 8.6 โปรดดู https://www.drupal.org/node/2936397:

ไม่สนับสนุนการใช้บริการตัวเข้ารหัส/นอร์มัลไลเซอร์โดยตรง ต้องใช้บริการ @serializer ซึ่งจะเรียกใช้บริการตัวเข้ารหัส/นอร์มัลไลเซอร์ที่เหมาะสม บริการที่มีแท็ก normalizer หรือ encoder เป็นรายละเอียดการใช้งานภายใน/ส่วนตัว เพื่อนำไปสู่บริการ @serializer ที่ใช้งานได้ สิ่งเหล่านี้ไม่เคยเป็น API พวกเขาใช้ API "ส่วนประกอบ Serializer" ของ Symfony

นี่คือสาเหตุที่บริการไม่แสดงเมื่อดูบริการที่มีอยู่ทั้งหมด:

/var/www/html# drupal debug:container | เกรป 'ฮัล'
hal.link_manager Drupal\hal\LinkManager\LinkManager                                        
hal.link_manager.relation Drupal\hal\LinkManager\RelationLinkManager                                
hal.link_manager.type Drupal\hal\LinkManager\TypeLinkManager  

อย่างที่คุณเห็นไม่มีบริการใดจาก แกน/โมดูล/hal/hal.services.ymlที่ถูกแท็กเป็น นอร์มัลไลเซอร์ อยู่ในรายการ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา