关于 api-platform-dto-resources
面向 Symfony API Platform 开发者的 DTO 资源技能,帮助将 API 契约与 Doctrine 实体分离。说明字段映射、操作专属输入输出,以及自动映射和自定义处理器的适用方式。
主要功能
- 01将 DTO 设为 API 资源契约
- 02映射 DTO 与实体字段
- 03为操作设置独立输入和输出
- 04使用 Object Mapper 或自定义处理器
- 05测试各操作的请求与响应结构
适用场景
- 01API 字段与实体字段名称或格式不同
- 02创建、更新和列表操作需要不同数据形状
- 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的代码,该接口已不复存在。
默认工作流
- 引入
symfony/object-mapper,并在 DTO 资源上设置stateOptions: new Options(entityClass: ...)。 - 使用
#[Map(source: ...)]和#[Map(target: ...)]绑定 DTO 与实体,并对计算字段使用#[Map(transform: ...)]。 - 对于不同的数据格式,创建输入类和输出类,并在各个操作上通过
input:和output:进行配置。 - 映射需要实际逻辑时,编写自定义
ProcessorInterface,调用ObjectMapperInterface::map()。 - 测试每个操作:输入请求负载,验证输出响应格式。
注意事项
- 自动 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