fattureincloud / api-filter
一个用于类似 SQL 过滤器的 PHP 解析器
Requires
- php: ^8.0
- antlr/antlr4-php-runtime: ^0.9.1
Requires (Dev)
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-02 07:41:24 UTC
README
这个 PHP 库使得解析字符串参数并将其用于初始化一个可以用于 REST API 的 Filter 成为可能;输入字符串基于简化的 SQL 类似 WHERE 子句,使其易于理解和使用。
该库返回基于类的过滤器表示,可用于生成实际应用于 API 请求的过滤器。
免责声明
该库目前专注于解析和构建查询的表示,它本身并不验证查询。例如,它不会检查字段是否存在或是否支持您的过滤器,也不会对查询执行权限检查。您应该自己注意这一点。
即使此过滤器使用了一种应该减少 SQL 注入风险的语法,您也应该采用某种策略来验证过滤器并避免执行不安全的查询。
安装
通过 Composer
$ composer require fattureincloud/api-filter
用法
要解析过滤器字符串,您可以使用 FattureInCloud\ApiFilter\FilterFactory 类
use FattureInCloud\ApiFilter\FilterFactory $str = "id = 5"; $factory = new FilterFactory(); $filter = $factory->initFilter($str);
返回的过滤器将是由 FattureInCloud\ApiFilter\Filter 包中包含的类组成的组合。
字符串基于三元组
field op value
字段 是一个包含点和下划线的小写字符串。
操作符 是以下之一(无需引号)
- 等于: '='
- 大于: '>'
- 大于等于: '>='
- 小于: '<'
- 小于等于: '<='
- 不等于: '<>', '!='
值 可以是以下之一
- 字符串: 'value'
- 布尔值: true, false
- 整数: 46
- 双精度浮点数: 12.34
您可以通过将单引号加倍来在字符串值中 转义单引号。过滤器将处理返回预期的字符串。
您还可以使用以下运算符之一来 匹配字符串与模式
- 类似: 'like', 'LIKE'
- 包含: 'contains', 'CONTAINS'
- 以...开始: 'starts with', 'STARTS WITH'
- 以...结束: 'ends with', 'ENDS WITH'
类似和包含也可以取反
- 不类似: 'not like', 'NOT LIKE'
- 不包含: 'not contains', 'NOT CONTAINS'
此外,您还可以使用 NULL 检查字段是否有值或没有值
- 空字段: 'IS NULL', 'is null', '= null', '= NULL'
- 非空字段: 'IS NOT NULL', 'is not null', '<> null', '!= null', '<> NULL', '!= NULL'
您可以使用以下运算符
- 合取: 'and', 'AND'
- 析取: 'or', 'OR'
括号可用于组合复杂表达式。
例如
city = 'Bergamo' and (age < 30 or (dev = true and (name = 'Giorgio' and surname is not null) or employer starts with 'Fatture'))
测试
$ composer test
解析器生成
解析器是使用 ANTLR 和 PHP 目标 自动生成的;它位于 FattureInCloud\ApiFilter\Parser 仓库中。通常,您不应直接管理解析器:FilterFactory 类是一个包装器,它为您管理它。
语法位于 /grammar 文件夹下,如果需要,您可以使用 docker 和 composer 触发解析器生成。
$ composer generate
如有需要,您可以通过更改 entrypoint.sh 文件中的 ANTLR 目标 在另一种语言中生成解析器。
许可证
MIT 许可证 (MIT)。