api-platform-filters について
API Platform のコレクションフィルターを設定する Symfony 開発スキルです。組み込み・カスタムのクエリーフィルター、Parameters API への移行、検証とインデックスの実践を扱います。
主な機能
- 01QueryParameter によるフィルター設定
- 02バージョン別の組み込みフィルター選択
- 03FilterInterface による独自ロジック
- 04厳密なクエリーパラメーター検証
- 05インデックスとテストの指針
活用シーン
- 01エンドポイントに検索・範囲パラメーターを追加
- 021つのパラメーターで複数プロパティを検索
- 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 に移行する場合。
デフォルトのワークフロー
- オペレーションで
QueryParameterを使ってparametersを宣言します。#[ApiFilter]は、3.4 のコードまたはまだ移行していないコードでのみ使用します。 - インストール済みのバージョンを確認して、パラメーターごとにフィルタークラスを選びます。
ExactFilter、PartialSearchFilter、FreeTextQueryFilter、OrFilter、IriFilter(4.2以降)、ComparisonFilter、SortFilter(4.3以降)、StartSearchFilter、EndSearchFilter、ChainFilter(4.4以降)があります。 - カスタムフィルターでは
FilterInterfaceを実装し、$context['parameter']からバインドされた値を読み取ります(AbstractFilterとfilterProperty()は4.4以降非推奨です。4.3 および 3.4 のコードでは引き続き使用します)。 strictQueryParameterValidationを有効にして、不明なクエリパラメーターに対して 400 を返します。- フィルター対象のカラムに
#[ORM\Index]を追加し、一致する値と一致しない値でエンドポイントをリクエストします。
注意事項
- フィルタークラスはステートレスに保ちます。リクエストデータはコンストラクターではなく
$contextから取得します。 - クライアントがフィルターに使用する必要のあるプロパティのみ公開します。
- ID と外部キーには完全一致を使用します。部分一致の
LIKE %value%ではインデックスを使用できません。 - カスタムフィルターでは値を検証し、文字列連結ではなく
generateParameterName()とsetParameter()でバインドします。
段階的な情報開示
- 実行時の方針とリスク管理には、このファイルを使用します。
- 実装の詳細が必要な場合は、リファレンスを開きます。
出力要件
- オペレーションごとのパラメーターと、フィルタークラスおよび受け付ける構文(例:
?price[gte]=1000)。 - フィルター対象のカラムに追加されたインデックス。
- 一致する結果、空の結果、不明なパラメーターに対するテスト。
リファレンス
reference.md
コメント
Markdown 対応