关于 api-platform-filters
用于配置 API Platform 集合筛选器的 Symfony 开发技能,涵盖内置和自定义查询筛选、迁移到 Parameters API,以及验证与索引实践。
主要功能
- 01基于 QueryParameter 配置筛选器
- 02按版本选择内置筛选器
- 03实现自定义 FilterInterface 逻辑
- 04启用严格查询参数验证
- 05提供筛选索引与测试指导
适用场景
- 01为端点添加搜索和范围参数
- 02用一个参数搜索多个属性
- 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 过滤器(Symfony)
适用场景
- 集合端点需要搜索、精确匹配、范围、日期、布尔值或排序查询参数。
- 一个查询参数需要搜索多个属性。
- 过滤器需要内置过滤器无法覆盖的自定义查询逻辑。
- 手动将
#[ApiFilter]声明(自 4.4 起已弃用)迁移到 Parameters API,或使用api:upgrade-filter迁移。
默认工作流
- 在操作上使用
QueryParameter声明parameters;仅在 3.4 代码或尚未迁移的代码中保留#[ApiFilter]。 - 为每个参数选择一个过滤器类,并检查已安装的版本:
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