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;
lớp UpdateBoxes mở rộng ResourceBase {
được bảo vệ $currentUser;
$boxesHandler được bảo vệ;
$event_dispacher được bảo vệ;
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ể $;
}
bản vá chức năng công cộng($container_id = null, $type = null, $product_id = null, $payload) {
}
}
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.