sigep / request
解析查询字符串的实用工具
0.2.10
2015-11-29 14:34 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.0.*
README
此包旨在简化查询字符串的解析,并获取有关用户希望获取的数据的信息。
(!) 此包仅解析查询字符串并返回一个格式化的数组。它不与数据库或其他类似项交互。返回的数据以及过滤、排序等的应用取决于应用程序的实现。
安装
在您的 composer.json
中添加存储库并声明依赖关系。
{ [...] "repositories": [ [...] { "type": "git", "url": "git@github.com:Cohros/Request.git" } ], "require": { [...] "sigep/request": "*" }, }
运行以下命令
composer update
用法
Request 支持分页、排序、过滤和搜索。
分页
对于分页,Request 使用 page
和 offset
参数。
示例
GET /cities
GET /cities?page=2
GET /cities?offset=100
GET /cities?offset=100&page=2
- 第一次请求将获取所有城市;
- 第二次将返回列表的第二页。默认情况下,偏移量设置为 15,因此将返回 15 个城市;
- 第三次将返回前 100 个城市。请求未指定页码,但定义了偏移量,因此 Request 假设这是第一页;
- 第四次请求将返回列表的第二页,偏移量为 100。
要确定请求是否需要分页,您可以使用
$Request = new \Sigep\Request\Request; $Request->paginate(); // returns a boolean
要获取请求的页码,请使用
$Request->page(); // returns a integer
要获取偏移量,请使用
$Request->offset(); // returns a integer
要设置默认偏移量(包默认为 15),请使用
$Request->setDefaultOffset(100); // set the default to 100
嵌入
有时资源与其他资源有关联,并且您希望能够提供这些关系,如果用户需要的话。在这种情况下使用 embed
参数。
示例
GET /cities?embed=country
GET /cities?embed=country,state
- 第一次请求将返回所有城市及其国家;
- 第二次将返回所有城市及其国家和州。
要获取嵌入关系的列表,请使用
$Request->embed(); // return a array
排序
您可以根据对象的任何属性对对象列表进行排序。
示例
GET /cities?sort=name
GET /cities?sort=-name
GET /cities?sort=state,name
- 第一次请求将按字母顺序返回城市的列表;
- 第二次将按字母顺序返回城市的列表;
- 第三次将按州和名称的字母顺序返回城市的列表;
要获取排序参数,请使用
// GET /cities?sort=state,name $sort = $Request->sort(); /** $sort will be similar to: array ( 'state' => 'ASC', 'name' => 'ASC', ) **/
搜索
示例
GET /cars?q=peugeot
- 上述请求将搜索具有
peugeot
的汽车。查询可以检查名称、描述、品牌或资源具有的任何内容。
要获取参数,请使用
$Request->search(); // return a string
应用程序负责定义如何执行搜索以及将使用的运算符(等于、类似等)。
过滤器
过滤器允许您根据其属性过滤结果。
示例
GET /user?gender=female
GET /user?age=>20&gender=female
GET /user?age=>20,<30
GET /users?age=20>,30<
GET /users?age=20;30
- 第一次请求将返回所有女用户的列表;
- 第二次将返回年龄超过 20 岁的女用户的列表;
- 第三次将返回年龄在 20 岁到 30 岁之间的用户列表(20 到 30 不包括);
- 第三次将返回年龄在 20 岁或以上且 30 岁或以下(20 到 30 包括)的用户列表;
- 第四次将返回年龄为 20 或 30 岁的用户列表;
要获取过滤器参数,请使用
$filters = $Request->filter(); /** GET /user?gender=female $filters = array ( 'gender' => array ( '=' => 'female', ) ); GET /user?age=+20&gender=female $filters = array ( 'age' => array ('>' => array ('20')), 'female' => array ('=' => array (0 => 'female')), ); GET /users?age=20;30 $filters = array ( 'age' => array ( '=' => array('20', '30'), ) );
注意,过滤器是查询字符串上的参数。一些词已被其他方法保留,如 page、offset 和 sort。
有关更多信息,请探索源代码:)
使用 StackEdit 编写。