如何在不使用注释的情况下为自定义 DTO 操作配置标识符?

问题描述 投票:0回答:1

基于 DTO 创建了一个非常简单的资源。所有逻辑都将通过自定义

DataProvider
提供,并且此项目不使用任何注释。

资源的配置是:

<resources xmlns="https://api-platform.com/schema/metadata">
    <resource class="App\Domain\Dto\ProductUpgradePrice">

        <collectionOperations>
            <collectionOperation name="get"/>
        </collectionOperations>

        <itemOperations>
            <itemOperation name="get"/>
        </itemOperations>

    </resource>
</resources>

实际的DTO是:

<?php declare(strict_types=1);

namespace App\Domain\Dto;

/** @psalm-immutable */
class ProductUpgradePrice
{

    public function __construct(
        public string $productId,
        public int $regularPrice,
        public int $upgradePrice
    ) {}

}

当我尝试

GET /api/product_upgrade_prices
时,我得到:

没有为 App\Domain\Dto\ProductUpgradePrice 类型的资源定义标识符

这很有道理。

docs提到使用注释

@ApiProperty
,但正如我之前提到的,这个项目没有注释。 (自从我发布问题以来,我向更新文档提交了一个PR,该问题已合并,所以希望未来的用户不会遇到同样的情况)

我尝试将其添加到资源配置中:

<property name="productId">
    <attribute name="identifier">true</attribute>
</property>

但得到了相同的结果。

如何在不使用注释的情况下进行配置?

php symfony api-platform.com
1个回答
5
投票

查看元数据 XSD,在第 113 行中,您可以看到

property
元素的此属性:

<xsd:attribute type="xsd:boolean" name="identifier"/>

这意味着你应该使用这个:

<property identifier="true" name="id" />
© www.soinside.com 2019 - 2024. All rights reserved.