mrcnpdlk/url-search-parser

URL搜索解析器 - 过滤器 & 搜索参数操作

v2.7.0 2022-05-23 11:59 UTC

README

Latest Stable Version Latest Unstable Version Total Downloads Monthly Downloads License FOSSA Status

Scrutinizer Code Quality Code Coverage Build Status

Code Climate Issue Count

Build Status

内容

此包是为解析高级查询到易于使用的对象而创建的。

基于https://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#advanced-queries

  1. 安装
  2. 支持的参数
    1. 排序
    2. 过滤
    3. 限制
    4. 页码
    5. 短语
    6. 其他
  3. 用法

安装

使用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的消息列表;

允许的操作符:eqltltegtgtelikellikerlikeinnotinnullnotnullregexp

如果使用不允许的操作符,将抛出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文件

FOSSA Status