giadc / json-api-request
处理 JSON API 请求的软件包
3.0.4
2024-07-24 17:01 UTC
Requires
- php: ^8.0.2
- symfony/http-foundation: ^6.0|^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- mockery/mockery: ^1.3
- phpunit/phpunit: ^10
README
这是一个用于在处理 JSON API 标准时自动处理分页、过滤、排序和包含的软件包。
安装
composer install giadc/json-api-request
基本用法
RequestParams
Request Params 提供用于从/修改与 JSON API V1.0 兼容的 HttpFoundation 请求的对象。
示例
GET /articles?include=author,comments.author&page[number]=3&page[size]=20&filter[author]=frank&sort=-created,title&fields[author]=name,age
use Giadc\JsonApiRequest\Requests\RequestParams; // By default it creates params from Globals $request = new RequestParams(); // Get Includes $request->getIncludes()->toArray(); // outputs: ['author', 'comments.author'] // Get Page Details $request->getPageDetails()->toArray(); // outputs: ['page' => ['number => 3, 'size' => 20]] // Get Sorting $request->getSortDetails()->toArray(); // outputs: [['field' => 'title', 'direction' => 'ASC'], ['field' => 'created', 'direction' => 'DESC']] // Get Filters $request->getFiltersDetails()->toArray(); // outputs: ['author' => ['frank']] // Get Full Pagination $request->getFullPagination(); // outputs: [{Pagination}, {Includes}, {Sorting}, {Filters}] // Get Fields $request->getFields()->toArray(); // outputs: ['author' => ['name', 'age']]
请求对象
所有对象都实现了 RequestInterface,并提供以下方法的访问权限: getParamsArray()
、getQueryString()
包含
$includes = new Includes(['author', 'comments.author'); $includes->add('site'); $includes->getQueryString(); //outputs: 'include=author,comments.author,site'
分页
分页设置默认的页面大小,如果不提供。它还将允许你通过设置 PAGINATION_DEFAULT
和 PAGINATION_MAX
环境变量来设置它能够返回的最大值。
$pagination = new Pagination(2, 20); $pagination->getQueryString(); //outputs: 'page[number]=2&page[size]=20' // PAGINATION_MAX=25 $pagination = new Pagination(2, 1000); $pagination->getQueryString(); //outputs: 'page[number]=2&page[size]=25'
排序
$sorting = new Sorting('-created,title'); $sorting->setSorting(); $sorting->getQueryString('created,-title'); //outputs: 'sort=created,title'
过滤
$filters = new Filters(['author' => 'frank'); $filters->addFilter('author', 'bob'); $filters->getQueryString(); //outputs: 'filter[author]=frank,bob'
排除
$filters = new Excludes(['author' => 'country'); $filters->add('author', 'age'); $filters->getQueryString(); //outputs: 'excludes[author]=country,age'
字段
$filters = new Fields(['author' => 'name'); $filters->add('author', 'age'); $filters->getQueryString(); //outputs: 'fields[author]=name,age'