用途:当集合端点需要搜索、精确匹配、范围、日期、布尔或排序查询参数时使用;也适用于一个查询参数需跨多个属性搜索、内置过滤器无法覆盖需自定义查询逻辑,以及把自 4.4 起弃用的 #[ApiFilter] 声明迁移到 Parameters API(可手动或使用 api:upgrade-filter)的场景。
主要能力:在操作上用 QueryParameter 声明参数;按已安装版本选择过滤器类,包括 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],再用匹配与非匹配值请求端点验证。自定义过滤器应校验值,并用 generateParameterName() 与 setParameter() 绑定,禁止字符串拼接。
限制与注意:过滤器类须无状态,请求数据取自 $context 而非构造函数;只暴露客户端需要过滤的属性;id 与外键用精确匹配,部分匹配 LIKE %value% 无法使用索引。输出应包含每个操作的参数、过滤器类与接受的语法(如 ?price[gte]=1000)、为过滤列添加的索引,以及匹配、空结果和未知参数三类测试。具体版本兼容与迁移细节暂未提供更多说明。