mrcnpdlk / url-search-parser
URL搜索解析器 - 过滤器 & 搜索参数操作
v2.7.0
2022-05-23 11:59 UTC
Requires
- php: >=7.2
- ext-json: *
Requires (Dev)
README
内容
此包是为解析高级查询到易于使用的对象而创建的。
基于https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#advanced-queries
安装
使用composer安装最新版本
composer require mrcnpdlk/url-search-parser
支持的参数
$oParser = new \Mrcnpdlk\Lib\UrlQueryParser\RequestParser($query);
排序
通用参数sort
可以用来描述排序规则。通过允许排序参数接受以逗号分隔的字段列表,每个字段可以有一个可能的单负号来表示降序排序。让我们看看一些例子
GET /messages?sort=-createDate
- 按createDate降序检索消息列表;GET /messages?sort=-type,createDate
- 按type降序检索消息列表。在特定类型中,较旧的消息首先排序;
/** * @var $oSort \Mrcnpdlk\Lib\UrlQueryParser\Criteria\Sort */ $oSort = $oParser->getSort();
过滤
过滤比排序更复杂。使用数组表示法。让我们看看一些例子
GET /messages?filter[created][lt]=2018-06-01
- 检索createDate小于2018-06-01的消息列表;GET /messages?filter[type][in]=urgent,warning,error
- 检索类型为urgent、warning或error的消息列表;GET /messages?filter[type][null]
- 检索类型为NULL的消息列表;
允许的操作符:eq
、lt
、lte
、gt
、gte
、like
、llike
、rlike
、in
、notin
、null
、notnull
、regexp
如果使用不允许的操作符,将抛出mrcnpdlk\Lib\UrlQueryParser\Exception\InvalidParamException
。
/** * @var $oFilter \Mrcnpdlk\Lib\UrlQueryParser\Criteria\Filter */ $oFilter = $oParser->getFilter();
限制
示例
GET /messages?limit=20
- 限制;
/** * @var $iLimit integer|null */ $iLimit = $oParser->getLimit(10); // in NULL default=10
页码
示例
GET /messages?page=1
- 分页。应与limit
参数一起使用;
/** * @var $iPage integer|null */ $iPage = $oParser->getPage(1); // in NULL default=1
短语
示例
GET /messages?phrase=foo
- 以便更容易过滤;
/** * @var $sPhrase string|null */ $sPhrase = $oParser->getPhrase(); // if not set NULL ir returned
其他参数
使用getQueryParam()
方法。
示例
GET /messages?foo=bar&baz=5
- 额外参数;
$sFoo = $oParser->getQueryParam('foo','string'); // return 'bar' $sBaz = $oParser->getQueryParam('baz','int'); // return 5
用法
// Two ways to get `query` argument for RequestParser constructor: $query = parse_url($url, PHP_URL_QUERY); // OR $query = $_SERVER['QUERY_STRING']; $oParser = new \Mrcnpdlk\Lib\UrlQueryParser\RequestParser($query);
示例
$url = 'https://api.expample.com?sort=id,-name&filter[isFoo][eq]=1&filter[age][gt]=12&page=3&limit=10&offset=20'; $query = parse_url($url, PHP_URL_QUERY); $oParser = new \Mrcnpdlk\Lib\UrlQueryParser\RequestParser($query); print_r($oParser->getSort()->toArray()); print_r($oParser->getFilter()->toArray()); print_r($oParser->getLimit()); print_r($oParser->getPage()); print_r($oParser->getPhrase());
结果
Array
(
[0] => mrcnpdlk\Lib\UrlQueryParser\Criteria\SortParam Object
(
[param] => id
[direction] => ASC
)
[1] => mrcnpdlk\Lib\UrlQueryParser\Criteria\SortParam Object
(
[param] => name
[direction] => DESC
)
)
Array
(
[0] => mrcnpdlk\Lib\UrlQueryParser\Criteria\FilterParam Object
(
[param] => isFoo
[operator] => eq
[sqlOperator] => =
[value] => 1
)
[1] => mrcnpdlk\Lib\UrlQueryParser\Criteria\FilterParam Object
(
[param] => age
[operator] => gt
[sqlOperator] => >
[value] => 12
)
)
10 // limit
3 // page
20 // offset
运行测试
./vendor/bin/phpunit
作者
- Marcin Pudełek - 初始工作 - mrcnpdlk
还可以参考参与此项目的贡献者列表。
许可证
版权(c)2018 Marcin Pudełek / mrcnpdlk
此项目受MIT许可证许可 - 有关详细信息,请参阅LICENSE文件