memio/validator

Memio的验证器,用于根据预定义的规则检查构建的模型

v3.0.1 2024-08-13 06:06 UTC

This package is auto-updated.

Last update: 2024-09-13 06:24:09 UTC


README

Memio的验证器库:允许定义 Constraints 以检查构建的 Memio模型 是否有效(例如,Method 不能既是抽象的又是最终的)。

注意:此软件包是 Memio 的一部分,Memio 是一个高度定制的 PHP 代码生成器。请查看 主仓库

安装

使用 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

你可以使用以下方式查看当前版本和过去版本

最后是一些元文档