locomotivemtl/charcoal-validator

dev-master 2020-05-06 14:34 UTC

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 对象,并且可选地,在 minmax 之间的特定范围内。

选项

结果消息

邮箱验证器

邮箱验证器确保值是正确的电子邮件地址。

选项

结果消息

空验证器

空验证器确保值不是“空”。在 PHP 中,empty 表示 ''[](一个空数组)、0'0'falsenull。任何对象实例都不被认为是空的。

选项

结果消息

长度验证器

长度验证器确保字符串(或 字符串对象)具有特定的长度。

此验证器跳过 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 编码风格

可以使用 composer phpcs 执行代码风格验证/强制执行。还可以使用 composer phpcbf 使用自动修复器。

在运行 phpstan analyse --level=max src/ tests/ 时,此模块应不会抛出错误 👍。

作者

许可

MIT 许可证 (MIT)

版权所有 © 2016 动力机制公司

作者

在此条件下,任何获得此软件和相关文档副本(“软件”)的人都可以免费使用该软件而不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许提供软件的人为此目的而使用该软件,前提如下:

上述版权声明和本许可声明应包含在软件的副本或主要部分中。

软件按“现状”提供,不提供任何明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和非侵权的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论这些责任是因合同、侵权或其他原因而引起的,无论是在软件的使用中、使用过程中或其他与软件相关的活动中。