У меня был собственный REST API, отлично работающий с Drupal 8. После обновления до Drupal 9.2.X Пластырь и Публиковать методы этого пользовательского REST API перестали работать. Теперь они выдают следующее исключение.
RuntimeException: вызываемый "Drupal\my_module\Plugin\rest\resource\UpdateBoxes::patch" требует значения для аргумента "$payload". в Drupal\Component\Utility\ArgumentsResolver->handleUnresolvedArgument() (строка 143 файла /var/www/docroot/core/lib/Drupal/Component/Utility/ArgumentsResolver.php).
Код, который я использую, следующий.
пространство имен Drupal\my_module\Plugin\rest\resource;
используйте Drupal\rest\ModifiedResourceResponse;
/**
 * Предоставляет ресурс для получения режимов просмотра по объектам и пакетам.
 *
 * @RestResource(
 * id = "update_boxes",
 * label = @Translation("Обновить поля"),
 * uri_paths = {
 * "canonical" = "/api/container/{container_id}/{type}/{product_id}/boxes"
 * }
 * )
 */
класс UpdateBoxes расширяет ResourceBase {
  /**
   * Текущий экземпляр пользователя.
   *
   * @var\Drupal\Core\Session\AccountProxyInterface
   */
  защищенный $currentUser;
  защищенный $boxesHandler;
  защищенный $event_dispacher;
  /**
   * {@inheritdoc}
   */
  общедоступная статическая функция create(ContainerInterface $container, массив $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');
    вернуть $экземпляр;
  }
  /**
   * Отвечает на запросы PATCH.
   *
   * @параметр $container_id
   * @параметр $тип
   * @параметр $product_id
   * @param $полезная нагрузка
   * @return \Drupal\rest\ModifiedResourceResponse
   * Объект ответа HTTP.
   */
    патч общедоступной функции ($container_id = null, $type = null, $product_id = null, $payload) {
      //Мой код здесь.
     
    }
}
В пластырь() я мог читать $ полезная нагрузка и видим массив отправленный в запросе, но после обновления сайта, $ полезная нагрузка является НОЛЬ.
Решение, которое я нашел, заключалось в изменении последнего аргумента пластырь() и извлечь полезную нагрузку из $запрос объект.
Патч публичной функции ($container_id = null, $type = null, $product_id = null, Request $request) {
  // ¦
  $payload = json_decode($request->getContent(), TRUE);
}
Я не смог найти никакой документации об этом изменении; Я не уверен, что это была хорошая практика или лучшая реализация для работы полезной нагрузки.