Oro 中的 RestAPI 自定义模型异步操作

问题描述

我创建了模型 AcmeBundle\Api\Model\AcmeLineItem,其中包含几个字段,并在 config/oro/api.yml 文件中对其进行了配置。

api:
  entity_aliases:
    AcmeBundle\Api\Model\AcmeLineItem:
      alias:        acme
      plural_alias: acme
  entities:
    AcmeBundle\Api\Model\AcmeLineItem:
      fields:
        name:
          data_type: string
          form_options:
            constraints:
              - NotBlank: ~
      actions:
        create: true
        update_list: true
        

处理器中可用于 create 操作的字段,并且可以由它以所需的方式进行处理。

- { name: oro.api.processor,action: create,group: save_data,class: AcmeBundle\Api\Model\AcmeLineItem }

但该方法需要元键中的主体结构。

{
  "Meta": {
    "name": "acme"
  }
}

基于此,很难找出如何处理 update_list 操作。

解决方法

需要指定实体标识符 (id)。 为此,请在 api.yml 文件中为 identifier_field_names 设置 AcmeBundle\Api\Model\AcmeLineItem 选项。

identifier_field_names string[] - 实体的标识符字段的名称。使用此选项可以覆盖在配置文件中设置的名称(对于不基于 ORM 实体的 API 资源)或从实体元数据中检索(对于 ORM 实体)。当您不想在 API 中使用主键作为实体标识符时,此选项很有用。

完整的 API 配置参考:https://doc.oroinc.com/backend/api/configuration/#web-api-entities-config