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. 01DTO を API リソース契約として使用
  2. 02DTO とエンティティのフィールドをマッピング
  3. 03操作ごとに入力と出力を設定
  4. 04Object 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] クラスを Doctrine エンティティから切り離した API コントラクトにする必要がある場合。
  • エンティティと API のフィールドで名前や形式が異なる場合(名前の変更、価格の書式設定、計算値など)。
  • 作成、更新、一覧表示の各操作で、それぞれ独自の入力または出力形式が必要な場合。
  • すでに存在しない DataTransformerInterface に依存していたコードを移行する場合。

デフォルトのワークフロー

  1. symfony/object-mapper を追加し、DTO リソースに stateOptions: new Options(entityClass: ...) を設定します。
  2. #[Map(source: ...)] と #[Map(target: ...)] で DTO とエンティティを関連付け、計算フィールドには #[Map(transform: ...)] を使用します。
  3. 異なる形式が必要な場合は入力クラスと出力クラスを作成し、各操作の input: と output: に設定します。
  4. マッピングに実際のロジックが必要な場合は、ObjectMapperInterface::map() を呼び出すカスタム ProcessorInterface を記述します。
  5. 各操作をテストします。ペイロードを入力し、レスポンスの形式を確認します。

ガードレール

  • 自動の Object Mapper プロバイダーとプロセッサーが適用されるのは、stateOptions に entityClass があり、DTO とエンティティの両方に #[Map] が付いている場合のみです。
  • DataTransformerInterface は廃止されています。代わりに Object Mapper、またはプロバイダーとプロセッサーを使用してください。
  • Object Mapper は 3.4 および Symfony 6.4 LTS では利用できません(Symfony 7.3+ が必要です)。この場合は、ProviderInterface と ProcessorInterface で手動マッピングしてください。
  • ObjectMapperProcessor は 5.0 で削除されました。自動マッピングには ObjectMapperInputProcessor と ObjectMapperOutputProcessor(4.3+)を使用します。
  • DTO リソースからエンティティ自体を返してはいけません。クライアントに渡すのはマッピングされたフィールドのみです。

段階的な情報開示

  • 実行方針とリスク管理には、このファイルを使用します。
  • 実装の詳細が必要な場合は、リファレンスを参照します。

出力の契約

  • #[Map] の関連付けを含むリソース、入力、出力の各クラス。
  • 選択したマッピング方法(Object Mapper またはカスタムプロセッサー)とその理由。
  • 各操作のリクエストとレスポンスの形式を示すテスト。

リファレンス

  • reference.md

コメント