rollerworks / search-dev
RollerworksSearch 单一开发(建议使用单独的包)
Requires
- php: >=8.1
- nesbot/carbon: ^2.38 || ^3.0
- psr/container: ^1.0 || ^2.0
- symfony/intl: ^6.4 || ^7.0
- symfony/options-resolver: ^6.4 || ^7.0
- symfony/property-access: ^6.4 || ^7.0
- symfony/string: ^6.4 || ^7.0
- symfony/translation-contracts: ^3.4
Requires (Dev)
- api-platform/core: ^3.2
- doctrine/doctrine-bundle: ^1.9.1 || ^2.2.3
- doctrine/orm: ^2.7.3
- jangregor/phpstan-prophecy: ^1.0.0
- matthiasnoback/symfony-dependency-injection-test: ^4.1.1 || ^5.1
- moneyphp/money: ^3.2.0 || ^4.0
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.5.7
- psr/simple-cache: ^1.0||^2.0.0||^3.0.0
- rollerscapes/standards: ^0.2.4
- ruflin/elastica: ^7.0
- symfony/asset: ^6.4 || ^7.0
- symfony/browser-kit: ^6.4 || ^7.0
- symfony/dom-crawler: ^6.4 || ^7.0
- symfony/framework-bundle: ^6.4 || ^7.0
- symfony/http-foundation: ^6.4 || ^7.0
- symfony/phpunit-bridge: ^6.4 || ^7.0
- symfony/routing: ^6.4 || ^7.0
- symfony/templating: ^6.4 || ^7.0
- symfony/translation: ^6.4 || ^7.0
- symfony/twig-bundle: ^6.4 || ^7.0
- symfony/validator: ^6.4 || ^7.0
- symfony/var-dumper: ^6.4 || ^7.0
Suggests
- moneyphp/money: To use the MoneyType
Conflicts
- moneyphp/money: <3.2.0
Replaces
- rollerworks/search: v2.0.0-BETA6
- rollerworks/search-api-platform: v2.0.0-BETA6
- rollerworks/search-bundle: v2.0.0-BETA6
- rollerworks/search-doctrine-dbal: v2.0.0-BETA6
- rollerworks/search-doctrine-orm: v2.0.0-BETA6
- rollerworks/search-elasticsearch: v2.0.0-BETA6
- rollerworks/search-symfony-validator: v2.0.0-BETA6
- dev-main / 2.0.x-dev
- v2.0.0-BETA6
- v2.0.0-BETA5
- v2.0.0-BETA4
- v2.0.0-BETA3
- v2.0.0-BETA2
- v2.0.0-BETA1
- v2.0.0-ALPHA23
- v2.0.0-ALPHA22
- v2.0.0-ALPHA21
- v2.0.0-ALPHA20
- v2.0.0-ALPHA19
- v2.0.0-ALPHA18
- v2.0.0-ALPHA17
- v2.0.0-ALPHA16
- v2.0.0-ALPHA15
- v2.0.0-ALPHA14
- v2.0.0-ALPHA13
- v2.0.0-ALPHA12
- v2.0.0-ALPHA11
- v2.0.0-ALPHA10
- v2.0.0-ALPHA9
- v2.0.0-ALPHA8
- v2.0.0-ALPHA7
- v2.0.0-ALPHA6
- v2.0.0-ALPHA5
- v2.0.0-ALPHA4
- v2.0.0-ALPHA3
- v2.0.0-ALPHA2
- v2.0.0-ALPHA1
- 1.x-dev
- v1.2.1
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.1
- v1.0.0
- v1.0.0-beta8
- v1.0.0-beta7
- v1.0.0-beta6
- v1.0.0-beta5
- v1.0.0-beta4
- v1.0.0-beta3
- v1.0.0-beta2
- v1.0.0-beta1
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.1
- v0.2.0
- v0.1.0
This package is auto-updated.
Last update: 2024-09-18 09:23:45 UTC
README
关于 RollerworksSearch
RollerworksSearch 是一个强大的 PHP 搜索系统。旨在使 PHP 应用程序中的搜索尽可能简单和快速。
无论您是想在 SQL 数据库中搜索用户,还是想提供一个使用 ElasticSearch 后端的强大搜索系统,或者寻找一种用于抽象过滤器的途径。
⚠️ RollerworksSearch v2.0 尚未稳定,应预期会有向后兼容的更改。
如果您正在寻找一个稳定版本,请等待最终 v2.0 版本的发布。
关于复杂的数据结构呢?
复杂的数据结构不是问题,比如您的客户数据存储在“customer”表中,发票数据存储在其自己的表中,发票的详细信息有自己的表。
您不需要编写一个非常冗长的 SQL 查询,您的用户可以使用简单的 StringQuery 语法
invoice-price: > $20.00; invoice-row-label: ~*"my cool product"; customer-type: !consumer
.
您使用单个条件在三个关系表中进行了搜索,语法友好。这只是开始,RollerworksSearch 可以与任何区域设置、自定义输入格式或存储系统一起工作。
搜索条件可以是您需要的简单或复杂,包括分组和嵌套以获得最佳结果。
功能
RollerworksSearch 提供了您从搜索系统期望的大部分功能,包括
- 使用 StringQuery 格式的本地化输入处理;
- 用户友好的格式验证;
- 与 API-Platform 的集成;
- 支持 Symfony 4.4 及以上版本(支持 Symfony Flex)。
并支持最受欢迎的存储系统。
安装和使用
如果您使用框架集成,请忽略以下说明。
阅读文档以获取完整说明和信息。
使用 Composer 安装 RollerworksSearch "核心" 库
$ composer install rollerworks/search
然后创建 SearchFactory
以开始。
use Rollerworks\Component\Search\Searches; use Rollerworks\Component\Search\Exception\InvalidSearchConditionException; use Rollerworks\Component\Search\Extension\Core\Type\TextType; use Rollerworks\Component\Search\Extension\Core\Type\IntegerType; use Rollerworks\Component\Search\Extension\Core\Type\ChoiceType; use Rollerworks\Component\Search\Input\ErrorPathHumanizer; use Rollerworks\Component\Search\Input\StringQueryInput; use Rollerworks\Component\Search\Input\ProcessorConfig; // The factory is reusable, you create it only once. $searchFactory = Searches::createSearchFactory(); // Create a fieldset to inform the system about your configuration. // Usually you will have a FieldSet for each data structure (users, invoices, etc). $userFieldSet = $searchFactory->createFieldSetBuilder() ->add('firstName', TextType::class) ->add('lastName', TextType::class) ->add('age', IntegerType::class) ->add('type', ChoiceType::class, [ 'choices' => ['Consumer' => 'c', 'Business' => 'b'], ]) ->getFieldSet('users'); // Now lets process a string query. // Tip: the input processor is reusable. $inputProcessor = new StringQueryInput(); try { // The ProcessorConfig allows to limit the amount of values, groups // and maximum nesting level. The defaults should be restrictive enough // for most situations. $processorConfig = new ProcessorConfig($userFieldSet); // The `process` method processes the input and produces // a valid SearchCondition (or throws an exception when something is wrong). $condition = $inputProcessor->process('firstName: sebastiaan, melany;'); } catch (InvalidSearchConditionException $e) { // Each error message can be transformed to a localized version // using the Symfony Translator contract. $translator = ...; // \Symfony\Contracts\Translation\TranslatorInterface // Note: The ErrorPathHumanizer only works for the `StringQueryInput` input processor. $errorPathHumanizer = new ErrorPathHumanizer($translator); foreach ($e->getErrors() as $error) { echo '<span>' $errorPathHumanizer->humanize($error->path) . ' </span><span>' . htmlentities($error->trans($translator), ENT_COMPAT | ENT_IGNORE, 'UTF-8') '</span>' . PHP_EOL; } }
就是这样!$condition
包含了规范化数据格式中的搜索条件,可以在条件处理器(如 ElasticSearch)中使用,或者导出为 JSON 格式,以便在 URL 中更容易使用。
注意: RollerworksSearch 由多个单独的包组成(以保持架构简洁),“核心”包提供了开始所需的一切。
搜索(文档)存储需要安装额外的包。
关于验证呢?
每个字段类型都确保值转换为正确的格式,例如,日期输入会自动转换为 DateTimeImuttable
对象。
如果提供的输入不是整数,则期望整数的字段将失败。
要强制执行更严格的约束,如整数字段的最高值,您可以使用 Symfony Validator 扩展。
资源
谁在背后支持 RollerworksSearch?
RollerworksSearch 由 Sebastiaan Stok 提供。
许可
RollerworksSearch 采用 MIT 许可证 发布。
类型和扩展主要受到 Symfony 表单组件的启发,并包含来自 Symfony 项目的大量代码。
支持
请使用问题跟踪器创建一个新 支持问题。
注意: 请耐心等待,可能需要一些时间才能回答您的问题。 不要 ping 维护者。
贡献
这是一个开源项目。如果您想贡献,请阅读 贡献指南。如果您正在提交拉取请求,请遵循 提交补丁 部分的指南。
注意: RollerworksSearch 在一个单体仓库中开发,请不要向标记为 [只读]
的仓库提交拉取请求,谢谢。