giadc/json-api-request

处理 JSON API 请求的软件包

3.0.4 2024-07-24 17:01 UTC

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_DEFAULTPAGINATION_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'