mcpField
A
api-platform-dto-resources

api-platform-dto-resources

github.com/dev-toolingsDevelopment22779 installsUpdated 3w ago
Repository

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

  1. 01Use DTOs as API resource contracts
  2. 02Map DTO and entity fields
  3. 03Set operation-specific input and output
  4. 04Choose Object Mapper or custom processors
  5. 05Test request and response shapes

Use cases

  1. 01API fields differ from entity names or formats
  2. 02Create, update, and list need distinct data shapes
  3. 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-resources

After installing, type/api-platform-dto-resourcesin Claude Code to confirm it loaded.

Bundled filesreference.md

Details

From the project README

Api 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

  1. Require symfony/object-mapper and set stateOptions: new Options(entityClass: ...) on the DTO resource.
  2. Bind the DTO and the entity with #[Map(source: ...)] and #[Map(target: ...)], and use #[Map(transform: ...)] for computed fields.
  3. For distinct shapes, create input and output classes and wire them with input: and output: on each operation.
  4. When mapping needs real logic, write a custom ProcessorInterface that calls ObjectMapperInterface::map().
  5. Test each operation: payload in, response shape out.

Guardrails

  • The automatic Object Mapper provider and processor only apply when stateOptions has an entityClass and both the DTO and the entity carry #[Map].
  • DataTransformerInterface is 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 ProviderInterface and a ProcessorInterface.
  • ObjectMapperProcessor is removed in 5.0: the automatic path uses ObjectMapperInputProcessor and ObjectMapperOutputProcessor (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