drupal 8 commerce get продукт возвращает пустой объект - PullRequest
2 голосов
/ 13 марта 2020

Итак, я создал несколько продуктов и добавил к ним некоторые данные:

enter image description here

По моему собственному маршруту я пытаюсь получить все продукты используя следующий код:

$products = \Drupal\commerce_product\Entity\Product::loadMultiple();
$response['data'] = $products;
$response['method'] = 'GET';
return new JsonResponse($response);

Однако это возвращает следующий ответ:

{"data":{"3":{},"6":{},"7":{}},"method":"GET"}

Может кто-нибудь сказать мне, что я сделал неправильно?

1 Ответ

0 голосов
/ 17 марта 2020

Ответ JSON не кодирует за первым уровнем глубины. Насколько я могу судить, вы не можете контролировать это при использовании new JsonResponse().

. Одним из решений является создание собственной структуры данных и кодирование JSON вручную. В этом решении используется служба сериализатора: https://drupal.stackexchange.com/a/191474/70331

В вашем случае что-то подобное должно кодировать полную структуру сущности.

use Drupal\commerce_product\Entity\Product;
use Symfony\Component\HttpFoundation\JsonResponse;
...

$products = Product::loadMultiple([$ids]);

$response['data'] = $products;
$response['method'] = 'GET';

$serializer = \Drupal::service('serializer');
$jsonResponse = JsonResponse::fromJsonString($serializer->serialize($response, 'json'));
return $jsonResponse;

При использовании 'сериализатора «Лучше всего предоставить это контроллеру через внедрение зависимостей.

...