mcpField
A
api-platform-filters

api-platform-filters

github.com/dev-toolings開発22781 回インストール3 週間前に更新
リポジトリ

api-platform-filters について

API Platform のコレクションフィルターを設定する Symfony 開発スキルです。組み込み・カスタムのクエリーフィルター、Parameters API への移行、検証とインデックスの実践を扱います。

主な機能

  1. 01QueryParameter によるフィルター設定
  2. 02バージョン別の組み込みフィルター選択
  3. 03FilterInterface による独自ロジック
  4. 04厳密なクエリーパラメーター検証
  5. 05インデックスとテストの指針

活用シーン

  1. 01エンドポイントに検索・範囲パラメーターを追加
  2. 021つのパラメーターで複数プロパティを検索
  3. 03非推奨の ApiFilter 宣言を移行

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/api-platform-filtersを入力して読み込まれたか確認します。

同梱ファイルreference.md

詳細

Api Platform Filters(Symfony)

使用する場面

  • コレクションエンドポイントで、検索、完全一致、範囲、日付、ブール値、またはソートのクエリパラメーターが必要な場合。
  • 1つのクエリパラメーターで複数のプロパティを検索する場合。
  • 組み込みフィルターでは対応できない独自のクエリロジックが必要な場合。
  • #[ApiFilter] 宣言(4.4以降非推奨)を、手動または api:upgrade-filter を使って Parameters API に移行する場合。

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

  1. オペレーションで QueryParameter を使って parameters を宣言します。#[ApiFilter] は、3.4 のコードまたはまだ移行していないコードでのみ使用します。
  2. インストール済みのバージョンを確認して、パラメーターごとにフィルタークラスを選びます。ExactFilter、PartialSearchFilter、FreeTextQueryFilter、OrFilter、IriFilter(4.2以降)、ComparisonFilter、SortFilter(4.3以降)、StartSearchFilter、EndSearchFilter、ChainFilter(4.4以降)があります。
  3. カスタムフィルターでは FilterInterface を実装し、$context['parameter'] からバインドされた値を読み取ります(AbstractFilter と filterProperty() は4.4以降非推奨です。4.3 および 3.4 のコードでは引き続き使用します)。
  4. strictQueryParameterValidation を有効にして、不明なクエリパラメーターに対して 400 を返します。
  5. フィルター対象のカラムに #[ORM\Index] を追加し、一致する値と一致しない値でエンドポイントをリクエストします。

注意事項

  • フィルタークラスはステートレスに保ちます。リクエストデータはコンストラクターではなく $context から取得します。
  • クライアントがフィルターに使用する必要のあるプロパティのみ公開します。
  • ID と外部キーには完全一致を使用します。部分一致の LIKE %value% ではインデックスを使用できません。
  • カスタムフィルターでは値を検証し、文字列連結ではなく generateParameterName() と setParameter() でバインドします。

段階的な情報開示

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

出力要件

  • オペレーションごとのパラメーターと、フィルタークラスおよび受け付ける構文(例:?price[gte]=1000)。
  • フィルター対象のカラムに追加されたインデックス。
  • 一致する結果、空の結果、不明なパラメーターに対するテスト。

リファレンス

  • reference.md

コメント