nerd4ever/url-query

一个用于提取参数进行过滤和排序的库

1.0.8 2020-06-17 12:07 UTC

This package is auto-updated.

Last update: 2024-09-17 22:09:24 UTC


README

一个用于提取参数进行过滤和排序的库。

codecov GitHub license GitHub issues Minimum PHP Version

安装

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',
    )),
  ),
));

Nerd4ever 官方主页