bentools / opencubes
0.1.1
2019-03-20 10:34 UTC
Requires
- php: ^7.1.3
- ext-json: *
- bentools/iterable-functions: ~1.2
- bentools/querystring: ~1.0,>=1.0.2
- bentools/uri-factory: ~1.1|~2.0
- symfony/options-resolver: ~2.6|~3.0|~4.0
Requires (Dev)
- filp/whoops: ^2.3
- guzzlehttp/psr7: ^1.4
- phpunit/phpunit: ^7.1
- satooshi/php-coveralls: ^2.1
- squizlabs/php_codesniffer: ^3.4
- symfony/var-dumper: ^4.0
This package is auto-updated.
Last update: 2024-08-27 21:55:50 UTC
README
OpenCubes
OpenCubes 是一套与框架无关的组件,用于将 PSR-7 URI 解析为值对象
- 分页
- 过滤器
- 排序
- 细分(按组)
概述
查看以下 URL
这是 OpenCubes 解析它的方式
use BenTools\OpenCubes\Component\Filter\FilterComponent; use BenTools\OpenCubes\Component\Sort\SortComponent; use BenTools\OpenCubes\Component\Pager\PagerComponent; use BenTools\OpenCubes\Component\Filter\Model\CollectionFilter; use BenTools\OpenCubes\Component\Filter\Model\RangeFilter; use BenTools\OpenCubes\Component\Filter\Model\SimpleFilter; use BenTools\OpenCubes\Component\Filter\Model\StringMatchFilter; use BenTools\OpenCubes\OpenCubes; use function BenTools\OpenCubes\current_location; $openCubes = OpenCubes::create(); $sorting = $openCubes->getComponent(SortComponent::getName()); $filters = $openCubes->getComponent(FilterComponent::getName()); $pager = $openCubes->getComponent( PagerComponent::getName(), ['default_size' => 100], current_location() // current_location() is the default and can be replaced by any PSR-7 Uri object ); // Pagination echo $pager->getCurrentPage(); // 3 echo $pager->getPerPage(); // 50 (it would be 100 when omiting the per_page parameter) echo $pager->getCurrentOffset(); // 100 $pager->setNbItems(160); // Your application found 160 items echo count($pager); // 4 pages of 50 for 160 items // Sorting foreach ($sorting->getAppliedSorts() as $sort) { echo $sort->getField(); // author.name echo $sort->getDirection(); // asc } // Filters foreach ($filters->getAppliedFilters() as $filter) { if ($filter instanceof RangeFilter) { echo $filter->getField(); // published_at echo $filter->getLeft(); // 2019-01-01 echo $filter->getRight(); // 2019-01-31 } if ($filter instanceof SimpleFilter) { echo $filter->getField(); // category_id echo $filter->getValue(); // 12 } if ($filter instanceof CollectionFilter) { echo $filter->getField(); // tags print_r($filter->getValues()); // ['foo', 'bar'] } if ($filter instanceof StringMatchFilter) { echo $filter->getField(); // name echo $filter->getValue(); // 'foo' echo $filter->getOperator(); // StringMatchFilter::STARTS_WITH var_dump($filter->isNegated()); // true } }
现在,我们可以要求我们的持久化系统(Doctrine、ElasticSearch、Solr、第三方 API、...)返回书籍
- 从偏移量
100
开始,限制到50
项 - 按
author.name
排序(使用您自己的逻辑解析字段路径) - 发布于
2019-01-01
和2019-01-31
之间 - 在类别 ID
12
中 - 匹配标签
foo
或bar
(也可以设置 AND 子句[链接]) - 但是它们的名称不能以
foo
开头。
将这些值对象转换为查询数据库或 API 现在由您自己负责!OpenCubes 目前不提供桥接,但也许在不久的将来。
自定义
每个组件都提供了大量的自定义选项(查询参数、默认设置、...)。
此外,您还可以通过实现 适当的接口 创建自己的 URI 解析器/构建器。
HATEOAS
OpenCubes 通过为每个组件提供链接将 HATEOAS 带到您的应用程序
- 页面/页面大小链接
- 应用/取消排序链接
- 应用/移除过滤器
- ...
每个原生组件都附带默认的 JSON 序列化,该序列化公开了适当的 URL。实现 JSONserializable 不是您的组件的强制要求,它已设计为即用型实现。通过您喜欢的序列化器可以实现不同的序列化(例如 Symfony / JMS 等)。
深入了解组件
安装
OpenCubes 仍处于开发的早期阶段,可能面临破坏性变更。
请随意贡献或报告任何问题。
composer require bentools/opencubes:1.0.x-dev
测试
./vendor/bin/phpunit
许可
MIT。