nerd4ever / url-query
一个用于提取参数进行过滤和排序的库
Requires
- php: ^7.1.3
Requires (Dev)
- phpunit/phpunit: 7.5.20
Suggests
- nerd4ever/url-query-pgsql: Used to process UrlQuerySQL in PostgreSQL
Conflicts
README
一个用于提取参数进行过滤和排序的库。
安装
composer require nerd4ever/url-query
支持的运算符
过滤器中使用的运算符和您的语法
- ge 值大于或等于
例如:test=between:3,5 (字段 => test, 运算符 => between, 起始 => 3, 结束 => 5)
- le 值小于或等于
例如:test=le:3 (字段 => test, 运算符 => le, 值 => 3)
- ne 值不等于
例如:test=ne:3 (字段 => test, 运算符 => ne, 值 => 3)
- eq 值等于
例如:test=eq:3 (字段 => test, 运算符 => eq, 值 => 3)
- gt 值大于
例如:test=gt:3 (字段 => test, 运算符 => gt, 值 => 3)
- lt 值小于
例如:test=lt:5 (字段 => test, 运算符 => lt, 值 => 5)
- regex 通过正则表达式验证值
例如:test=regex:[0-9] (字段 => test, 运算符 => regex, 值 => [0-9])
- in 一个或多个可能值(以逗号分隔)
例如:test=in:3,4,5 (字段 => test, 运算符 => in, 值 => [3,4,5])
- between 起始和结束范围内的值(以逗号分隔)。
例如:test=between:3,5 (字段 => test, 运算符 => between, 起始 => 3, 结束 => 5)
- contains 值在任意位置
例如:test=contains:3 (字段 => test, 运算符 => contains, 值 => 3)
- start 值在开头
例如:test=start:3 (字段 => test, 运算符 => start, 值 => 3)
- finish 值在结尾
例如:test=finish:3 (字段 => test, 运算符 => finish, 值 => 3)
- nil 值为空
例如:test=nil: (字段 => test, 运算符 => nil)
排序器语法
http://sandbox.nerd4ever.com.br/url-query?_orders=data1:asc&data2:desc&data3
- test:asc (字段 => test, 类型=> asc)
- test:desc (字段 => test, 类型=> desc)
- test (字段 => test, 类型=> asc)
限制语法
http://sandbox.nerd4ever.com.br/url-query?_limit=10
- _limit=10 (属性 => _limit, 值=> 10)
偏移语法
http://sandbox.nerd4ever.com.br/url-query?_limt=10&_offset=1
- _limit=10 (属性 => _limit, 值=> 10)
- _offset=1 (属性 => __offset, 值=> 1)
查询字符串示例
http://sandbox.nerd4ever.com.br/url-query?data0=3&data1=ge:3&data2=le:3&data3=ne:3&data4=eq:3&data5=gt:3&data6=lt:3&data7=regex:[0-9]&data8=in:3,4,5&data9=between:3,5&data10=contains:3&data11=start:3&data12=finish:5&data13=nil:&_orders=data1:asc,data2:desc,data3
用法
use Nerd4ever\UrlQuery\Model\UrlQuery; $urlQuery = new UrlQuery(); $urlQuery->parser($_SERVER['QUERY_STRING']);
输出示例 对于 var_export($urlQuery, true) 代码上面的结果,使用 QUERY_STRING ?data0=3&data1=ge:3&data2=le:3&data3=ne:3&data4=eq:3&data5=gt:3&data6=lt:3&data7=regex:[0-9]&data8=in:3,4,5&data9=between:3,5&data10=contains:3&data11=start:3&data12=finish:5&data13=nil:&_orders=data1:asc,data2:desc,data3
Nerd4ever\UrlQuery\Model\UrlQuery::__set_state(array( 'reservedSortField' => '_orders', 'filters' => array ( 0 => Nerd4ever\UrlQuery\Model\CriteriaEquals::__set_state(array( 'value' => '3', 'field' => 'data0', )), 1 => Nerd4ever\UrlQuery\Model\CriteriaGreaterThanOrEquals::__set_state(array( 'value' => '3', 'field' => 'data1', )), 2 => Nerd4ever\UrlQuery\Model\CriteriaLessThanOrEquals::__set_state(array( 'value' => '3', 'field' => 'data2', )), 3 => Nerd4ever\UrlQuery\Model\CriteriaNotEquals::__set_state(array( 'field' => 'data3', 'value' => '3', )), 4 => Nerd4ever\UrlQuery\Model\CriteriaEquals::__set_state(array( 'value' => '3', 'field' => 'data4', )), 5 => Nerd4ever\UrlQuery\Model\CriteriaGreaterThan::__set_state(array( 'value' => '3', 'field' => 'data5', )), 6 => Nerd4ever\UrlQuery\Model\CriteriaLessThan::__set_state(array( 'value' => '3', 'field' => 'data6', )), 7 => Nerd4ever\UrlQuery\Model\CriteriaRegex::__set_state(array( 'value' => '[0-9]', 'field' => 'data7', )), 8 => Nerd4ever\UrlQuery\Model\CriteriaIn::__set_state(array( 'values' => array ( 0 => '3', 1 => '4', 2 => '5', ), 'field' => 'data8', )), 9 => Nerd4ever\UrlQuery\Model\CriteriaBetween::__set_state(array( 'start' => '3', 'end' => '5', 'field' => 'data9', )), 10 => Nerd4ever\UrlQuery\Model\CriteriaContains::__set_state(array( 'value' => '3', 'field' => 'data10', )), 11 => Nerd4ever\UrlQuery\Model\CriteriaStart::__set_state(array( 'value' => '3', 'field' => 'data11', )), 12 => Nerd4ever\UrlQuery\Model\CriteriaFinish::__set_state(array( 'value' => '5', 'field' => 'data12', )), 13 => Nerd4ever\UrlQuery\Model\CriteriaNil::__set_state(array( 'field' => 'data13', )), ), 'sorters' => array ( 0 => Nerd4ever\UrlQuery\Model\Sorter::__set_state(array( 'type' => 'asc', 'field' => 'data1', )), 1 => Nerd4ever\UrlQuery\Model\Sorter::__set_state(array( 'type' => 'desc', 'field' => 'data2', )), 2 => Nerd4ever\UrlQuery\Model\Sorter::__set_state(array( 'type' => 'asc', 'field' => 'data3', )), ), ));