如何将我的扩展字段公开给 API?

How do I expose my extended field to the API?

我已经开始使用 OroCommerce,并想尝试扩展本机 OroCommerce 实体以向其添加字段。

出于测试目的,我尝试将“testField”字段添加到产品实体。

所以我按照文档创建了一个迁移 class,并且工作正常:

class ExtendNativeMigration implements Migration
{
    public function up(Schema $schema, QueryBag $queries)
    {
        $table = $schema->getTable("oro_product");
        $table->addColumn('testField', "string", [
            "oro_options" => [
                "extend" => ["owner" => ExtendScope::OWNER_CUSTOM]
            ]
        ]);
    }
}

我现在在 oro_product table 中有一个“testField”列。

我面临的问题是我似乎无法将新创建的字段公开给 API。

我在我的包中创建了 api.yml 文件,并尝试了这样的操作:

api:
  entities:
    Oro\Bundle\ProductBundle\Entity\Product:
      fields: 
        testField:
          exclude: false

但是当我调用产品时该字段没有出现API。我尝试了 api.yml 文件中的其他内容,但无济于事。

当我转储 API 配置时该字段出现,但它只是显示“null”:

...
    exclusion_policy: all
    fields:
        testField: null
        skuUppercase:
            exclude: true
...

我可能在这里做错了什么,但我不确定是什么。

我能得到一些关于如何正确执行此操作的指示吗?谢谢!

你的代码绝对没问题。我已经在本地检查过了,该字段添加到 API 没有任何问题。

  1. 确保在更新 API YAML 配置后有 运行 php bin/console oro:api:cache:clear -eprod 命令。

  2. 此外,如果您正在使用店面 API,您应该使用 api_frontend.yml 而不是 api.yml 文件。