gnugat / search-engine
此包已被弃用且不再维护。未建议替代包。
组件尝试帮助您正确获取 CQRS 中的查询部分
v0.3.0
2016-05-19 17:07 UTC
Requires
- php: ^7.0
- beberlei/porpaginas: ^1.0
Requires (Dev)
- fabpot/php-cs-fixer: ^1.11
- memio/spec-gen: ^0.4
- phpunit/phpunit: ^5.3
README
一个概念验证,演示如何处理询问消息(CQRS 中的查询)。
命令/查询责任分离 原则解释说,命令和询问消息不应混合在一起。
注意:了解更多关于不同的 消息风味。
通常使用 CommandBus 模式处理命令消息,这让我们面临以下问题:如何处理询问消息?
此组件尝试探索一个可能的答案:一个搜索引擎,会尝试返回符合给定标准的搜索结果。
警告:此组件不提供实际的搜索引擎功能,如果您正在寻找一个,那么您应该查看 ElasticSearch,Solr 等工具。
安装
使用 Composer 下载 SearchEngine
composer require gnugat/search-engine:^0.3
您还需要选择以下实现之一
- PommSearchEngine,一个 Pomm 基础库 实现
- 嘿,你刚刚遇到这个库,这太疯狂了,但它有接口,所以实现它们,也许吧?
其他可能的实现:PDO,Doctrine DBAL,Doctrine ORM 等。在 tests
目录中您可以找到一个 Array
实现示例。
使用
SearchEngine
期望一个 Criteria
对象,它描述了
- 要查询的资源
- 要嵌入的关系
- 要应用的过滤器
- 排序指令
- 分页参数
它可以从查询参数构建,如下所示
// ... $criteria = $criteriaFactory->fromQueryParameters('blog', [ // Filters 'title' => 'IG', 'author_ids' => '1,3', // Pagination 'page' => '2', 'per_page' => '3', // Ordering 'sort' => 'author_id,-title', // Relation embeding 'embed' => 'author', ]); print_r(iterator_to_array( $searchEngine ->match($criteria) ->take( $criteria->paginating->offset, $criteria->paginating->itemsPerPage ) ->getIterator() ));
在 Web 上下文中,此 $queryParameters
数组可以是 $_GET
,对应以下 URL
/v1/blogs?title=IG&author_ids=1,2&page=1&per_page=3&sort=author_id,-title&embed=author
结果可能是以下
[
'items' => [
[
'id' => 1,
'title' => 'Big Title',
'author_id' => 1,
],
[
'id' => 2,
'title' => 'Big Header',
'author_id' => 2,
],
],
'page' => [
'current_page' => 1,
'per_page' => 3,
'total_elements' => 2,
'total_pages' => 1,
],
]
更多信息
您可以使用以下方式查看当前和过去版本:
- 使用
git tag
命令 - 在 Github 上的 发布页面
- 列出版本之间更改的文件
您可以在以下链接中找到更多文档:
下一章