如何在不使用注释的情况下为自定义 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" />
基于 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" />