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

How do I configure the identifier for a custom DTO operation without using annotations?

基于 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 我得到:

No identifiers defined for resource of type App\Domain\Dto\ProductUpgradePrice

有道理。

docs mention using the annotation @ApiProperty, but as I mentioned earlier, no annotations for this project. (I submitted a PR to update 自从我发布问题后,文档已合并,希望未来的用户不会遇到同样的情况)

我试过将此添加到资源配置中:

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

但得到了相同的结果。

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

查看 metadata XSD, in line 113 您可以看到 property 元素的这个属性:

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

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

<property identifier="true" name="id" />