mcpField
A
api-platform-dto-resources

api-platform-dto-resources

github.com/dev-toolings开发22779 次安装3 周前更新
代码仓库

关于 api-platform-dto-resources

面向 Symfony API Platform 开发者的 DTO 资源技能,帮助将 API 契约与 Doctrine 实体分离。说明字段映射、操作专属输入输出,以及自动映射和自定义处理器的适用方式。

主要功能

  1. 01将 DTO 设为 API 资源契约
  2. 02映射 DTO 与实体字段
  3. 03为操作设置独立输入和输出
  4. 04使用 Object Mapper 或自定义处理器
  5. 05测试各操作的请求与响应结构

适用场景

  1. 01API 字段与实体字段名称或格式不同
  2. 02创建、更新和列表操作需要不同数据形状
  3. 03迁移不再提供的 DataTransformerInterface

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill api-platform-dto-resources

安装后在 Claude Code 中输入/api-platform-dto-resources确认已加载。

附带文件reference.md

详细介绍

Api Platform Dto Resources(Symfony)

适用场景

  • #[ApiResource] 类必须作为 API 契约,与 Doctrine 实体解耦。
  • 实体字段与 API 字段的名称或格式不同(重命名、格式化价格、计算值)。
  • 创建、更新或列表操作需要各自的输入或输出格式。
  • 迁移依赖 DataTransformerInterface 的代码,该接口已不复存在。

默认工作流

  1. 引入 symfony/object-mapper,并在 DTO 资源上设置 stateOptions: new Options(entityClass: ...)。
  2. 使用 #[Map(source: ...)] 和 #[Map(target: ...)] 绑定 DTO 与实体,并对计算字段使用 #[Map(transform: ...)]。
  3. 对于不同的数据格式,创建输入类和输出类,并在各个操作上通过 input: 和 output: 进行配置。
  4. 映射需要实际逻辑时,编写自定义 ProcessorInterface,调用 ObjectMapperInterface::map()。
  5. 测试每个操作:输入请求负载,验证输出响应格式。

注意事项

  • 自动 Object Mapper provider 和 processor 仅在 stateOptions 包含 entityClass,且 DTO 与实体都带有 #[Map] 时适用。
  • DataTransformerInterface 已不存在:请使用 Object Mapper,或使用 provider 和 processor。
  • Symfony 3.4 和 Symfony 6.4 LTS 不支持 Object Mapper(它需要 Symfony 7.3+):请在 ProviderInterface 和 ProcessorInterface 中手动映射。
  • ObjectMapperProcessor 已在 5.0 中移除:自动映射路径使用 ObjectMapperInputProcessor 和 ObjectMapperOutputProcessor(4.3+)。
  • 绝不要从 DTO 资源返回实体本身:只有经过映射的字段才会传递给客户端。

渐进式披露

  • 使用此文件了解执行方式和风险控制。
  • 需要深入了解实现细节时,请查阅参考资料。

输出约定

  • 提供带有 #[Map] 绑定的资源类、输入类和输出类。
  • 说明所选的映射路径(Object Mapper 或自定义 processor)及其原因。
  • 提供测试,展示每个操作的请求和响应格式。

参考资料

  • reference.md

评论

支持 Markdown