【问题标题】:ORO API non-resource structureORO API 非资源结构
【发布时间】:2021-10-20 03:02:28
【问题描述】:

我正在尝试为自定义数据结构创建一种 API 方法,该方法可以处理与其他 API 资源的关系,但在 normalize_input 操作组处理器方面存在问题。 例如,我需要处理orderlineitems 元素列表并给出自定义响应。为了完成这项任务,我创建了所需结构的模型类。

class ListModel
{
   /** @var Collection|OrderLineItem[] */
   protected $lineItems;
   ...
}

并在api_frontend.yml注册:

api:
  entities:
    Ardex\Bundle\OrderBundle\Api\Model\CartProducts:
      disable_meta_properties: true
      fields:
        lineItems:
          target_class: Oro\Bundle\ProductBundle\Entity\Product
          target_type: to-many
        actions:
          get: false
          get_list: false
          update: false
          delete: false
          delete_list: false
          create: true

在 Xdebug 的帮助下,我发现所有请求数据都应该在 meta 参数中发送,在这种情况下 included 请求正文部分被忽略了。

【问题讨论】:

    标签: orocrm orocommerce


    【解决方案1】:

    根据以上信息,API 框架不知道如何使用 CartProducts 模型,以及如何处理 lineItems 列表。因为 CartProducts 不是实体,资源甚至没有 ID。

    要使其正常工作,您应该将数据显式映射到自定义 API 处理器中以用于 create 操作。 见:

    但我仍然不确定,为任务使用功能齐全的 API 框架是个好主意。如果您不打算使用除创建之外的任何其他操作并且 API 资源是完全自定义的,那么最好create a custom API controller 并明确管理那里的复杂性。

    以我们在核心中的示例为例,您可以检查productcollection 资源,但它是只读的。没有模型引用实体的示例,API 框架不知道如何使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多