#php #symfony #api-platform.com
#php #symfony #api-platform.com
Вопрос:
Создал очень простой ресурс на основе DTO. Вся логика будет предоставляться через пользовательский DataProvider
интерфейс, и для этого проекта аннотации не используются.
Конфигурация для ресурса:
<resources xmlns="https://api-platform.com/schema/metadata">
<resource class="AppDomainDtoProductUpgradePrice">
<collectionOperations>
<collectionOperation name="get"/>
</collectionOperations>
<itemOperations>
<itemOperation name="get"/>
</itemOperations>
</resource>
</resources>
Фактический DTO:
<?php declare(strict_types=1);
namespace AppDomainDto;
/** @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 не определены идентификаторы
Что имеет смысл.
В документах упоминается использование аннотации @ApiProperty
, но, как я упоминал ранее, никаких аннотаций для этого проекта нет. (Я отправил запрос на обновление документов с тех пор, как опубликовал вопрос, который был объединен, поэтому, надеюсь, будущие пользователи не попадут в такую же ситуацию)
Я попытался добавить это в конфигурацию ресурса:
<property name="productId">
<attribute name="identifier">true</attribute>
</property>
Но получил те же результаты.
Как я могу настроить это без использования аннотаций?
Ответ №1:
Просматривая метаданные XSD, в строке 113 вы можете увидеть этот атрибут для
property
элемента:
<xsd:attribute type="xsd:boolean" name="identifier"/>
Что означает, что вы должны использовать это вместо:
<property identifier="true" name="id" />
Комментарии:
1. Спасибо за помощь. Я не знаю, как я это пропустил. Надеюсь, это будет полезно для кого-то еще.