symfony 在API平台上实现POST和PUT之间的不同DTO

k5hmc34c  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(140)

我正在使用Api Platform和DTO。我想知道是否有可能只在POST中有一个字段,而不在PUT中。在我的用例中,我有一个客户需要一个电子邮件字段,所以该字段应该在GET和POST中存在。无论如何,电子邮件不应该被更改,所以该字段不应该在PUT中存在。这是定义我的资源的YAML文件:

App\Entity\Customer:
  attributes:
    input: 'App\DTO\CustomerInput'
    output: 'App\DTO\CustomerOutput'
  collectionOperations:
    get:
      path: /customer
    post:
      path: /customer
  itemOperations:
    get:
      path: /customer/{fiscalId}
    put:
      path: /customer/{fiscalId}

这是输入DTO:

class CustomerInput
{
    public string $fiscalId;
    public string $email;
    public string $businessName;
}

我遇到的主要问题是在Open API文档中没有将email字段作为POST的有效输入字段公开。

am46iovg

am46iovg1#

首先,我认为您应该指定您使用的api平台版本,因为在版本2.6和2.7之间处理DTO的方式发生了变化。因此,如果您使用的是2.6或更低版本,您可以为每个操作指定自定义输入和输出,如下所示(Api平台文档):

App\Entity\Book:
  collectionOperations:
    create:
      method: POST
      input: App\Dto\CreateBook
      output: App\Dto\BookOutput
  itemOperations:
    update:
      method: PUT
      input: App\Dto\UpdateBook
      output: App\Dto\BookOutput

相关问题