Điểm:0

Di chuyển API nghỉ ngơi tùy chỉnh bằng PATCH/POST

lá cờ lb

Tôi đã có API REST tùy chỉnh hoạt động hoàn hảo với Drupal 8. Sau khi nâng cấp lên Drupal 9.2.X, Bưu kiện các phương thức của API REST tùy chỉnh này đã ngừng hoạt động. Bây giờ họ ném ngoại lệ sau.

RuntimeException: "Drupal\my_module\Plugin\rest\resource\UpdateBoxes::patch" có thể gọi được yêu cầu một giá trị cho đối số "$payload". trong Drupal\Component\Utility\ArgumentsResolver->handleUnresolvedArgument() (dòng 143 của /var/www/docroot/core/lib/Drupal/Component/Utility/ArgumentsResolver.php).

Mã tôi đang sử dụng là mã sau đây.

không gian tên Drupal\my_module\Plugin\rest\resource;

sử dụng Drupal\rest\ModifiedResourceResponse;

/**
 * Cung cấp tài nguyên để nhận các chế độ xem theo thực thể và gói.
 *
 * @RestResource(
 * id = "hộp_cập nhật",
 * nhãn = @Translation("Hộp cập nhật"),
 * uri_paths = {
 * "canonical" = "/api/container/{container_id}/{type}/{product_id}/boxes"
 * }
 * )
 */
lớp UpdateBoxes mở rộng ResourceBase {

  /**
   * Một phiên bản người dùng hiện tại.
   *
   * @var \Drupal\Core\Session\AccountProxyInterface
   */
  được bảo vệ $currentUser;

  $boxesHandler được bảo vệ;

  $event_dispacher được bảo vệ;

  /**
   * {@inheritdoc}
   */
  tạo hàm tĩnh công khai (ContainerInterface $container, mảng $configuration, $plugin_id, $plugin_definition) {
    $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition);
    $instance->currentUser = $container->get('current_user');
    $instance->boxesHandler = $container->get('boxes.handler');
    $instance->event_dispacher = $container->get('event_dispatcher');

    trả lại cá thể $;
  }

  /**
   * Trả lời các yêu cầu PATCH.
   *
   * @param $container_id
   * @param $type
   * @param $product_id
   * @param $ tải trọng
   * @return \Drupal\rest\ModifiedResourceResponse
   * Đối tượng phản hồi HTTP.
   */
    bản vá chức năng công cộng($container_id = null, $type = null, $product_id = null, $payload) {
      // Mã của tôi ở đây.
     
    }

}

Trong vá() tôi có thể đọc tải trọng $ và xem mảng được gửi trong yêu cầu, nhưng sau khi nâng cấp trang web, tải trọng $VÔ GIÁ TRỊ.

Giải pháp tôi tìm thấy là thay đổi đối số cuối cùng của vá() và trích xuất tải trọng từ yêu cầu $ vật.

bản vá chức năng công cộng($container_id = null, $type = null, $product_id = null, Request $request) {
  // â¦
  $payload = json_decode($request->getContent(), TRUE);
}

Tôi không thể tìm thấy bất kỳ tài liệu nào về thay đổi này; Tôi không chắc đó là một cách thực hành tốt hay cách triển khai tốt hơn để tải trọng hoạt động.

Điểm:1
lá cờ cn

Tôi đang gặp vấn đề tương tự với một được phương pháp. Nó dường như liên quan đến việc chuyển đổi các tham số (xem vấn đề được báo cáo). Tôi đã có thể khắc phục sự cố bằng cách sử dụng các tên tham số đơn giản, ví dụ: xóa tất cả dấu gạch dưới trong các nhận xét và tên tham số phương thức:

"canonical" = "/api/container/{containerid}/{type}/{productid}/boxes"

Và trong phương pháp:

bản vá chức năng công cộng($containerid = null, $type = null, $productid = null, Request $request) {
mogio avatar
lá cờ cn
Cảm ơn. Điều đó đã làm việc. Điều này nên được đánh dấu là "câu trả lời". Tôi đã xóa dấu gạch dưới khỏi tham số và đổi tên tên tham số chính tắc thành tên chính xác của $var của hàm get. :) Thú vị hơn là nó đã hoạt động trong Drupal 8 :)

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