【问题标题】:drupal 8 commerce get product returns empty objectdrupal 8 commerce 获取产品返回空对象
【发布时间】:2020-03-13 09:48:27
【问题描述】:

所以我创建了一些产品并添加了一些数据:

在我的自定义路线中,我尝试使用以下代码获取所有产品:

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

但是这会返回以下响应:

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

谁能告诉我我做错了什么?

【问题讨论】:

    标签: php drupal drupal-commerce


    【解决方案1】:

    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;
    

    如果使用“序列化器”,最好通过依赖注入将其提供给控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-03
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      相关资源
      最近更新 更多