Điểm:0

Làm cách nào để giữ cho các dịch vụ tùy chỉnh tương tự không bị xung đột?

lá cờ in

Tôi có hai mô-đun, mỗi mô-đun đang xác định dịch vụ chuẩn hóa

module_one.services.yml

dịch vụ:
  module_one.normalizer.node_entity:
    lớp: Drupal\module_one\Normalizer\ModuleOneEntityNormalizer
    đối số: ['@entity_type.manager']
    thẻ:
      - { tên: chuẩn hóa, ưu tiên: 10 }

module_two.services.yml

dịch vụ:
  module_two.normalizer.node_entity:
    lớp: Drupal\module_two\Normalizer\ModuleTwoEntityNormalizer
    đối số: ['@entity_type.manager']
    thẻ:
      - { tên: chuẩn hóa, ưu tiên: 10 }

Đối với mỗi mô-đun, tôi đang tạo một trình chuẩn hóa riêng biệt và có lẽ xác định một không gian tên riêng, ví dụ:

<?php

không gian tên Drupal\module_one\Normalizer;

sử dụng Drupal\Core\Entity\EntityTypeManagerInterface;
sử dụng Drupal\serialization\Normalizer\ContentEntityNormalizer;
sử dụng Drupal\node\NodeInterface;

/**
 * Chuyển đổi cấu trúc đối tượng thực thể Drupal thành một mảng được chuẩn hóa.
 */
lớp ModuleOneEntityNormalizer mở rộng ContentEntityNormalizer {
...

Vấn đề là với cả hai mô-đun được bật, một dịch vụ sẽ chặn dịch vụ kia - trình nối tiếp/trình chuẩn hóa kích hoạt như mong đợi cho mô-đun đầu tiên nhưng không phải cho mô-đun thứ hai. Cách duy nhất để cái kia được công nhận là tăng mức độ ưu tiên của nó nhưng điều đó lại chặn cái đầu tiên.

Tôi còn thiếu điều gì trong các định nghĩa có thể ngăn hai dịch vụ này xung đột với nhau?

Cập nhật: Cảm ơn vì những nhận xét thực sự hữu ích, bắt đầu quay số về điều này. Cả hai bộ chuẩn hóa đều có cùng một $supportedInterface được bảo vệ, ví dụ:

  /**
   * Giao diện hoặc lớp mà Bộ chuẩn hóa này hỗ trợ.
   *
   * chuỗi @var
   */
  được bảo vệ $supportedInterfaceOrClass = [
    'Drupal\nút\NodeInterface'
  ];

Cái nào được gắn cờ trong Sổ tay API tuần tự hóa Drupal như một vấn đề

Kevin avatar
lá cờ in
Tại sao không thay đổi mức độ ưu tiên và sau đó điều chỉnh các quy tắc lựa chọn khi áp dụng? https://api.drupal.org/api/drupal/core%21modules%21serialization%21src%21Normalizer%21NormalizerBase.php/function/NormalizerBase%3A%3AsupportsNormalization/9.2.x nếu chúng hoạt động trên cùng một loại thực thể mà không có khác biệt có điều kiện, bạn có thể cần thêm thông tin ngữ cảnh khi sắp xếp theo thứ tự.
lá cờ ru
Hoặc có thể là [dịch vụ trang trí](https://symfony.com/doc/current/service_container/service_decoration.html)
4uk4 avatar
lá cờ cn
Bạn cần làm rõ nội dung trong `protected $supportedInterfaceOrClass`. Nếu nó giống nhau, tham số nào khác nếu không phải là mức độ ưu tiên hoặc định dạng chọn bộ chuẩn hóa nào sẽ được sử dụng?
Điểm:1
lá cờ in

Tìm thấy một câu trả lời làm việc với hướng dẫn hữu ích từ các ý kiến ​​​​tại đây. Điều quan trọng là trong cả hai lớp Trình chuẩn hóa, tôi đã không sử dụng hỗ trợChuẩn hóa chức năng

 /**
 * Kiểm tra xem lớp đã cho có được bộ chuẩn hóa này hỗ trợ để chuẩn hóa hay không.
 */
   hỗ trợ chức năng công khaiNormalization($data, $format = NULL) {
      if (!is_object($data) || !$this->checkFormat($format)) {
        trả về SAI;
      }
      if ($data instanceof NodeInterface && $data->getType() == 'myContentType') {
        trả về ĐÚNG;
      }
        trả về SAI;
      }
    }

Với chức năng trên, tôi có thể tiếp tục có mức độ ưu tiên cho cả hai trình chuẩn hóa trong services.yml được đặt thành cùng một giá trị (ví dụ: '10'), nó sẽ kích hoạt cho cả hai nhưng trả về false nếu nó không khớp với nội dung cụ thể loại.

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