spacetab-io / harmony-validation
异步验证库
1.1.1
2020-07-10 18:14 UTC
Requires
- php: >=7.3
- ext-ctype: *
- ext-dom: *
- ext-fileinfo: *
- ext-filter: *
- ext-gd: *
- ext-hash: *
- ext-json: *
- ext-libxml: *
- ext-mbstring: *
- amphp/amp: ^2.4
- amphp/dns: ^1.2
- amphp/file: ^1.0
- amphp/parallel-functions: ^1.0
- amphp/process: ^1.1
- amphp/uri: ^0.1
- egulias/email-validator: ^2.1
- myclabs/php-enum: ^1.7
- react/promise: ^2.7
- wikimedia/ip-set: ^2.1
Requires (Dev)
- amphp/phpunit-util: ^1.3
- brianium/paratest: ^4.0
- harmonyio/php-codesniffer-ruleset: dev-master
- maglnet/composer-require-checker: ^2.0.0
- phpunit/phpunit: ^9
- slevomat/coding-standard: ^5.0.4
- spacetab-io/harmony-cache: ^1.1
- spacetab-io/harmony-http-client: ^1.0
- squizlabs/php_codesniffer: ^3.4.2
Suggests
- spacetab-io/harmony-cache: Install it for caching API requests
- spacetab-io/harmony-http-client: Install it for caching API requests
This package is auto-updated.
Last update: 2024-09-11 03:13:30 UTC
README
异步验证库
要求
- PHP 7.3
- ext-ctype
- ext-dom
- ext-fileinfo
- ext-filter
- ext-gd
- ext-hash
- ext-json
- ext-libxml
- ext-mbstring
- Redis
此外,对于非阻塞上下文,应安装以下事件库之一
安装
composer require harmonyio/validation
使用方法
此库基于amphp 并发框架。
基本用法
对单个规则进行值验证
<?php declare(strict_types=1); namespace HarmonyIO\Validation\Examples; use Amp\Loop; use HarmonyIO\Validation\Result\Result; use HarmonyIO\Validation\Rule\Numeric\NumericType; require_once '/path/to/vendor/autoload.php'; Loop::run(static function () { /** @var Result $result */ $result = yield (new NumericType())->validate(true); var_dump($result); });
这将生成以下Result
对象
object(HarmonyIO\Validation\Result\Result)#11 (2) { ["valid":"HarmonyIO\Validation\Result\Result":private]=> bool(false) ["errors":"HarmonyIO\Validation\Result\Result":private]=> array(1) { [0]=> object(HarmonyIO\Validation\Result\Error)#10 (2) { ["message":"HarmonyIO\Validation\Result\Error":private]=> string(19) "Numeric.NumericType" ["parameters":"HarmonyIO\Validation\Result\Error":private]=> array(0) { } } } }
堆叠验证规则
当您想对同一值应用多个规则时,可以将验证规则堆叠在一起
<?php declare(strict_types=1); namespace HarmonyIO\Validation\Examples; use Amp\Loop; use HarmonyIO\Validation\Result\Result; use HarmonyIO\Validation\Rule\Combinator\All; use HarmonyIO\Validation\Rule\Numeric\Maximum; use HarmonyIO\Validation\Rule\Numeric\Minimum; use HarmonyIO\Validation\Rule\Numeric\NumericType; require_once '/path/to/vendor/autoload.php'; Loop::run(static function () { /** @var Result $result */ $result = yield (new All( new NumericType(), new Minimum(1), new Maximum(100) ))->validate(102); var_dump($result); });
这将生成以下Result
对象
object(HarmonyIO\Validation\Result\Result)#11 (2) { ["valid":"HarmonyIO\Validation\Result\Result":private]=> bool(false) ["errors":"HarmonyIO\Validation\Result\Result":private]=> array(1) { [0]=> object(HarmonyIO\Validation\Result\Error)#26 (2) { ["message":"HarmonyIO\Validation\Result\Error":private]=> string(15) "Numeric.Maximum" ["parameters":"HarmonyIO\Validation\Result\Error":private]=> array(1) { [0]=> object(HarmonyIO\Validation\Result\Parameter)#24 (2) { ["key":"HarmonyIO\Validation\Result\Parameter":private]=> string(7) "maximum" ["value":"HarmonyIO\Validation\Result\Parameter":private]=> float(100) } } } } }
验证规则
已实现一个详尽的验证规则列表。有关所有支持规则的总览,请参阅维基文档。
所有验证规则都遵循相同的接口
<?php declare(strict_types=1); namespace HarmonyIO\Validation\Rule; use Amp\Promise; interface Rule { /** * @param mixed $value * @return Promise<HarmonyIO\Validation\Result\Result> */ public function validate($value): Promise; }
这将确保任何值都可以始终传递进行验证,并且始终会生成一个解析为Result
对象的承诺。
如果您缺少验证规则,请随时提交问题。
组合器
组合器是一种将多个验证规则组合成单个结果的方式。
这可以用于根据现有规则构建更复杂的验证规则。
结果和错误
所有验证始终产生一个HarmonyIO\Validation\Result\Result
对象。
要检查验证后值是否有效,我们可以简单地调用HarmonyIO\Validation\Result\Result::isValid()
方法,它返回一个简单的布尔值。
如果验证失败,可以使用Result
对象的两种方法之一访问验证错误
HarmonyIO\Validation\Result\Result::getFirstError()
- 如果没有错误则返回null
,否则返回一个HarmonyIO\Validation\Result\Error
对象HarmonyIO\Validation\Result\Result::getErrors()
- 返回一个包含HarmonyIO\Validation\Result\Error
对象的数组
错误
当验证产生无效结果时,至少会将一个Error
对象添加到Result
对象中。
错误对象始终有一个错误消息(可用于在项目中翻译并渲染)和零个或多个参数。
参数用于失败的验证规则基于动态值时。例如,当基于文本最小长度的验证规则失败时,它将生成以下Error
对象
object(HarmonyIO\Validation\Result\Error)#17 (2) { ["message":"HarmonyIO\Validation\Result\Error":private]=> string(18) "Text.MinimumLength" ["parameters":"HarmonyIO\Validation\Result\Error":private]=> array(1) { [0]=> object(HarmonyIO\Validation\Result\Parameter)#15 (2) { ["key":"HarmonyIO\Validation\Result\Parameter":private]=> string(6) "length" ["value":"HarmonyIO\Validation\Result\Parameter":private]=> int(4) } } }
传统/阻塞用法
尽管此项目基于异步编程,但仍可以使用wait()
辅助函数以更传统的阻塞方式使用它
<?php declare(strict_types=1); namespace HarmonyIO\Validation\Examples; use HarmonyIO\Validation\Result\Result; use HarmonyIO\Validation\Rule\Numeric\NumericType; use function Amp\Promise\wait; require_once '/path/to/vendor/autoload.php'; /** @var Result $result */ $result = wait((new NumericType())->validate(true)); var_dump($result);
规则
所有实现规则的概述(包括用法和版本信息)已在维基中记录。