symfony DTO API平台v3

vngu2lb8  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(149)

在使用API Platform v3时,我在使用DTO时遇到以下问题:

  • @id字段看起来像“/.well-known/genid/01 e546 d3 f38 c 0 b5 d3 b8 a”,我找不到任何方法来获取实体的IRI。
  • 如何在使用PUT/PATCH方法时初始化DTO,在v2中,我使用ApiPlatform\Core\DataTransformer\DataTransformerInitializerInterface。

我已经尝试了不同的解决方案,并深入到源代码之前,问,我没有找到任何方法来解决这两个问题。

mwg9r5ms

mwg9r5ms1#

现在,您必须在DTO上设置GET操作,以便正确生成@id字段,请参见this issue以获取参考。
如果你有这个实体:

<?php
class MyEntity {
    private int $id;
}

您将拥有此DTO:

<?php
#[Get(
        uriTemplate: '/my_entities/{id}',
        shortName: 'MyEntity',
        provider: MyEntityProvider::class
)]
class MyEntityDTO {
    public int $id;
}

注意,您必须设置shortName和uriTemplate的值。shortName允许将所有操作放在swagger文档中的同一个MyEntity标记下。
对于第二个问题,现在必须使用提供程序和处理程序来处理api-platform v3中的数据状态,请参见documentation。在PUT/PATCH操作的情况下,必须使用处理程序。

相关问题