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, Vá và 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 $
Là 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.