locomotivemtl / charcoal-validator
数据验证
Requires
- php: >=7.2
- ext-fileinfo: *
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^7.5
- satooshi/php-coveralls: ^2.0
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-06 23:46:43 UTC
README
强大的数据验证。
目录
如何安装
建议使用(且唯一支持的)方式安装 charcoal-rule 是使用 composer
composer require locomotivemtl/charcoal-rule
依赖项
PHP 7.2+
ext-json
- 用于结果序列化。
ext-mb
- 用于多字节(unicode)字符串长度验证。
ext-fileinfo
- 用于读取文件的 mimetype 信息。
示例用法
$validator = new Validator([ new NullRule(), new LengthRule([ 'min' => 3, 'max' => 200 ]) ], [ new LengthRule([ 'max' => 150 ]) ]); $stringToValidate = 'foobar'; $result = $validator($stringToValidate); echo $result->isValid();
验证器
验证器是所有验证的主要接口。它的目标是统一地链接各种验证器以执行一系列验证。它还允许按级别(错误、警告或信息)拆分验证。
它有一个单一的功能,即 validate()
,它也是可调用的,并返回一个 Validation
对象。
public function __construct( array $errorRules, array $warningRules, array $infoRules ); public function __invoke($val): Validation;
验证对象
Validation
对象是每个验证级别的结果的集合(\Charcoal\Validator\Result
)。通常不会直接实例化,而是从调用一个 Validator
实例返回。
public function results( ?string $level=null, bool $returnFailures=true, bool $returnSkipped=false, bool $returnSuccess=false ) : array; public function isValid(?string $level=null) : bool; public function isSkipped(): bool;
验证器选项
验证运行器是无状态的;所有选项都必须直接传递给构造函数。
唯一可用的选项是使用不同类型的规则。请参阅示例
规则
每个规则都是无状态的,所有 选项 都必须直接传递给构造函数。
每个规则只有一个公共方法:process($val)
,也可以直接调用。它总是返回一个 Result
对象。
结果
结果在处理规则后的值后保存结果代码。通常不会直接实例化,而是从调用一个 Rule
实例返回。
public function getType(): string; public function getCode(): string; public function getMessage(): string; public function isValid() : bool; public function isSkipped(): bool;
可用的规则
日期验证器
日期验证器确保值是日期兼容的字符串或 DateTime 对象,并且可选地,在 min
和 max
之间的特定范围内。
选项
结果消息
邮箱验证器
邮箱验证器确保值是正确的电子邮件地址。
选项
结果消息
空验证器
空验证器确保值不是“空”。在 PHP 中,empty 表示 ''
、[]
(一个空数组)、0
、'0'
、false
或 null
。任何对象实例都不被认为是空的。
选项
结果消息
长度验证器
长度验证器确保字符串(或 字符串对象)具有特定的长度。
此验证器跳过 null 或空字符串。如果需要,可以使用空值验证器或空验证器进行检查。
默认情况下,此验证器使用 unicode(使用 mb_strlen
进行比较)。可以通过将 unicode
选项设置为 false 来禁用。
选项
使用
unicode
标志使用mb_strlen
来计算字符串长度。因此,需要mb
PHP 扩展。
结果消息
空值验证器
空验证器确保值不是 空。
它还可以执行相反的验证(确保值是 空),通过将 require_null
选项设置为 true
。
选项
结果消息
模式验证器
模式验证器确保字符串(或字符串对象)具有特定的长度。
选项
消息
自定义规则
将自定义规则添加到验证器构造函数非常简单。可以通过扩展抽象类 \Charcoal\Validator\Rule
来创建自定义规则服务。或者,只要符合以下签名,也支持回调规则:
use \Charcoal\Validator\Result; function(mixed $value) : Result;
以下是一个回调自定义规则的示例
use \Charcoal\Validator\Validator; use \Charcoal\Validator\NullRule; use \Charcoal\Validator\Result; $validator = new Validator([ new NullRule(), function($value) : Result { if (!is_string($value)) { return new Result( Result::TYPE_SKIPPED, 'fullstop.skipped.invalid-type', 'Value is not a string.' ); } if (substr($val, -1) !== '.') { return new Result( Result::TYPE_FAILURE, 'fullstop.error.no-fullstop', 'The sentence does not end with a full stop.' ); } else { return new Result( Result::TYPE_SUCCESS, 'fullstop.success.fullstop', 'The sentence ends with a full stop.' ); } } ]); $validationResult = $validator($val); $success = $validationResult->isValid(); $results = $validationResult->results(Validator::LEVEL_ERROR);
还可以使用 Rule
的实例,它提供了一些辅助函数来生成响应和消息
use \Charcoal\Validator\Validator; use \Charcoal\Validator\NullRule; use \Charcoal\Validator\Rule; use \Charcoal\Validator\Result; class FullStopRule extends Rule { public function process($val): Result { if (!is_string($val)) { return $this->skip('fullstop.skipped.invalid-type'); } if (substr($val, -1) !== '.') { return $this->failure('fullstop.error.no-fullstop'); } else { return $this->success('fullstop.success.fullstop'); } } public function messages(): array { return [ 'fullstop.skipped.invalid-type' => '', 'fullstop.error.no-fullstop' => '', 'fullstop.success.fullstop' => '' ]; } }; $validator = new Validator([ new NullRule(), new FullStopRule() ]); $validationResult = $validator($val); $success = $validationResult->isValid(); $results = $validationResult->results(Validator::LEVEL_ERROR);
开发
要安装开发环境
$ composer install --prefer-source
使用以下命令运行测试
$ composer test
开发依赖
phpunit/phpunit
squizlabs/php_codesniffer
satooshi/php-coveralls
持续集成
编码风格
Charcoal-Validator 模块遵循 Charcoal 编码风格
-
PSR-4,因此自动加载由 Composer 提供。
-
phpDocumentor 注释。
-
阅读 phpcs.xml 文件以了解所有代码风格详情。
可以使用
composer phpcs
执行代码风格验证/强制执行。还可以使用composer phpcbf
使用自动修复器。
在运行
phpstan analyse --level=max src/ tests/
时,此模块应不会抛出错误 👍。
作者
许可
MIT 许可证 (MIT)
版权所有 © 2016 动力机制公司
见 作者。
在此条件下,任何获得此软件和相关文档副本(“软件”)的人都可以免费使用该软件而不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许提供软件的人为此目的而使用该软件,前提如下:
上述版权声明和本许可声明应包含在软件的副本或主要部分中。
软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是因合同、侵权或其他原因而引起的,无论是在软件的使用中、使用过程中或其他与软件相关的活动中。