About api-platform-dto-resources
A DTO resource skill for Symfony API Platform developers, focused on separating the API contract from Doctrine entities. It covers field mapping, operation-specific input and output, and when to use automatic mapping or custom processors.
Key features
- 01Use DTOs as API resource contracts
- 02Map DTO and entity fields
- 03Set operation-specific input and output
- 04Choose Object Mapper or custom processors
- 05Test request and response shapes
Use cases
- 01API fields differ from entity names or formats
- 02Create, update, and list need distinct data shapes
- 03Migrate from the removed DataTransformerInterface
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ dev-toolings/ superpowers-symfony --skill api-platform-dto-resourcesAfter installing, type/api-platform-dto-resourcesin Claude Code to confirm it loaded.
Bundled filesreference.md
Details
From the project READMEApi Platform Dto Resources (Symfony)
Use when
- The
#[ApiResource]class must be the API contract, decoupled from the Doctrine entity. - Entity and API fields differ in name or format (rename, formatted price, computed value).
- Create, update, or list operations need their own input or output shape.
- Migrating code that relied on
DataTransformerInterface, which no longer exists.
Default workflow
- Require
symfony/object-mapperand setstateOptions: new Options(entityClass: ...)on the DTO resource. - Bind the DTO and the entity with
#[Map(source: ...)]and#[Map(target: ...)], and use#[Map(transform: ...)]for computed fields. - For distinct shapes, create input and output classes and wire them with
input:andoutput:on each operation. - When mapping needs real logic, write a custom
ProcessorInterfacethat callsObjectMapperInterface::map(). - Test each operation: payload in, response shape out.
Guardrails
- The automatic Object Mapper provider and processor only apply when
stateOptionshas anentityClassand both the DTO and the entity carry#[Map]. DataTransformerInterfaceis gone: use Object Mapper or a provider and processor.- No Object Mapper on 3.4 or on Symfony 6.4 LTS (it needs Symfony 7.3+): map manually in a
ProviderInterfaceand aProcessorInterface. ObjectMapperProcessoris removed in 5.0: the automatic path usesObjectMapperInputProcessorandObjectMapperOutputProcessor(4.3+).- Never return the entity itself from a DTO resource: only mapped fields reach the client.
Progressive disclosure
- Use this file for execution posture and risk controls.
- Open references when deep implementation details are needed.
Output contract
- The resource, input, and output classes with their
#[Map]bindings. - The mapping path chosen (Object Mapper or custom processor) and why.
- Tests showing the request and response shape of each operation.
References
reference.md
Comments
Markdown supported