【问题标题】:How to use Doctrine Extensions in Api Platform如何在 Api 平台中使用 Doctrine Extensions
【发布时间】:2019-11-30 14:49:13
【问题描述】:

我在带有 Api 平台的 Symfony 4 项目中使用 stofDoctrineExtensionsBundle。我有 sluggabletimestampable 扩展活动。当我手动保存实体时,它就像一个魅力,即在固定装置中,但是当我通过 POST collectionOperations 保存时,它不起作用,并说这些字段(slug、createdAt 和 updatedAt)是必需的。 几天后我找不到解决方案。 非常感谢(这是我在这里的第一个问题)。

【问题讨论】:

  • 发布您的学说扩展配置,请。我将 Doctrine Extensions 与 Api-Platform 一起使用,效果很好
  • 你能发布你的吗?我只是从项目中删除了这个包,但我仍然对使用它感兴趣。非常感谢。
  • 坚持文档,它应该像在“普通” symfony 应用程序中一样工作。您可以发布您的代码,也许我发现缺少一些东西。
  • 我也有这个问题。它的 sais :“未提供所需类型 String! 的字段 createCardInput.createdAt。未提供所需类型 String! 的字段 createCardInput.updatedAt。” - 我只是使用使用 TimestampableEntity;特征。

标签: symfony doctrine-orm symfony4 api-platform.com


【解决方案1】:

这些字段不应该是必需的。

sluggable 和 timestampable 扩展将它们的值设置为 onFlush,这是一个原则事件,它计算对象中的更改并运行 SQL 查询以实际更新数据库。 API 平台将在 WRITE 阶段实现这一点,这是在验证之后,因此验证不会看到这些值。删除@Assert\NotBlank@Assert\NotNull等字段的所有断言。

如果这些字段在其映射配置中不可为空(例如@ORM\Column()),它们将按要求出现在 API 平台生成的 swagger、open api 或 Hydra 文档中。一些客户端,如管理客户端和客户端生成器中的客户端,使用此文档,因此将为所需的这些属性进行输入。 在这些属性的文档块中添加以下注释:

* @ApiProperty(required=false)

这个注解需要靠近文件的顶部:

use ApiPlatform\Core\Annotation\ApiProperty;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多