memio / validator
Memio的验证器,用于根据预定义的规则检查构建的模型
v3.0.1
2024-08-13 06:06 UTC
Requires
- php: ^7.2 || ^8.0
- memio/model: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- phpspec/phpspec: ^6.1 || ^7.0
This package is auto-updated.
Last update: 2024-09-13 06:24:09 UTC
README
Memio的验证器库:允许定义 Constraints
以检查构建的 Memio模型 是否有效(例如,Method
不能既是抽象的又是最终的)。
安装
使用 Composer 安装
$ composer require memio/validator:^3.0
示例
假设我们想检查 Arguments
不是标量。为了做到这一点,我们首先需要编写一个 Constraint
<?php require __DIR__.'/vendor/autoload.php'; use Memio\Validator\Constraint; use Memio\Validator\Violation\NoneViolation; use Memio\Validator\Violation\SomeViolation; class ArgumentCannotBeScalar implements Constraint { public function validate($model) { $type = $model->getType(); if (in_array($type, ['array', 'bool', 'callable', 'double', 'int', 'mixed', 'null', 'resource', 'string'], true)) { return new SomeViolation(sprintf('Argument "%s" cannot be scalar', $model->getName())); } return new NoneViolation(); } }
注意:在Memio中,所有
Constraints
都以其错误消息命名。这不是一个硬编码的规则,它们可以有任何名称。
然后我们需要在我们的 ArgumentValidator
中注册我们的规则
// ... $argumentValidator = new ArgumentValidator(); $argumentValidator->add(new ArgumentCannotBeScalar());
ArgumentValidator
是一个 ModelValidator
,当给定的模型是 Argument
时,由 Validator
调用。然而,如果给定的模型是 Method
,我们希望 Validator
将我们的 Constraint
与其 Arguments
进行检查。为此,我们需要按照以下方式组装 ModelValidators
// ... $collectionValidator = new CollectionValidator(); $methodValidator = new MethodValidator($argumentValidator, $collectionValidator); $contractValidator = new ContractValidator($collectionValidator, $methodValidator); $objectValidator = new ObjectValidator($collectionValidator, $methodValidator); $fileValidator = new FileValidator($contractValidator, $objectValidator);
最后,我们需要创建一个验证器并将我们的 ModelValidators
注册在其中
// ... $myValidator = new Validator(); $myValidator->add($argumentValidator); $myValidator->add($collectionValidator); $myValidator->add($methodValidator); $myValidator->add($contractValidator); $myValidator->add($objectValidator); $myValidator->add($fileValidator);
这样我们就可以构建专业的验证器:一个检查语法错误,一个检查业务规则等...可能性是无限的!
查看 主仓库 以了解Memio的全部功能。
想了解更多吗?
Memio 使用 phpspec,这意味着测试也提供了文档。你不信?那么克隆此仓库并运行以下命令
$ composer install -o $ ./vendor/bin/phpspec run -n -f pretty
你可以使用以下方式查看当前版本和过去版本
git tag
命令- Github上的发布页面
- 列出版本之间更改的文件
最后是一些元文档