alleyinteractive/laminas-validator-extensions

为 laminas-validator 框架提供额外的验证类。

v2.1.1 2024-02-14 17:54 UTC

This package is auto-updated.

Last update: 2024-09-14 19:09:38 UTC


README

此包为 Laminas Validator 框架提供额外的验证类,以及一个自定义的基本验证类。

安装

使用以下命令安装最新版本:

$ composer require alleyinteractive/laminas-validator-extensions

基本用法

有关验证器的作用、使用方法和如何编写自己的验证器的更多信息,请访问Laminas 文档

基本验证器

ExtendedAbstractValidator

抽象类 Alley\Validator\ExtendedAbstractValidator 使用 \Laminas\Validator\AbstractValidator 标准化自定义验证器的实现。

在扩展 ExtendedAbstractValidator 时,验证逻辑应放入一个新的 testValue() 方法中,该方法仅负责应用逻辑并添加任何验证错误。在评估输入之前不再需要调用 setValue(),如果评估输入后没有错误消息,则 isValid() 返回 true;如果有任何消息,则返回 false

之前

<?php

class Float extends \Laminas\Validator\AbstractValidator
{
    const FLOAT = 'float';

    protected $messageTemplates = [
        self::FLOAT => "'%value%' is not a floating point value",
    ];

    public function isValid($value)
    {
        $this->setValue($value);

        if (! is_float($value)) {
            $this->error(self::FLOAT);
            return false;
        }

        return true;
    }
}

之后

<?php

class Float extends \Alley\Validator\ExtendedAbstractValidator
{
    const FLOAT = 'float';

    protected $messageTemplates = [
        self::FLOAT => "'%value%' is not a floating point value",
    ];

    public function testValue($value): void
    {
        if (! is_float($value)) {
            $this->error(self::FLOAT);
        }
    }
}

FreeformValidator

独立、抽象的 Alley\Validator\FreeformValidator 类将大多数实现细节留给您自行决定,但对于项目特定或尚未准备更广泛分发的验证器来说,通常更容易使用。

ExtendedAbstractValidator 类类似,FreeformValidator 预期验证逻辑放入 testValue() 方法中,并且根据是否有错误消息,isValid() 将返回 truefalse

可以使用接受消息键和文本的 error() 方法添加验证错误。

<?php

class Float extends \Alley\Validator\FreeformValidator
{
    public function testValue($value): void
    {
        if (! is_float($value)) {
            $this->error('float', 'Please enter a floating point value');
        }
    }
}

"任意验证器"链

\Alley\Validator\AnyValidator 类类似于Laminas 验证器链,不同之处在于它使用 "OR" 连接验证器,只要输入通过给定的任一验证器,就会标记为有效。

与 Laminas 验证器链不同,验证器只能附加,不能前置,且没有 $priority 参数。

基本用法

<?php

$valid = new \Alley\Validator\AnyValidator([new \Laminas\Validator\LessThan(['max' => 10])]);
$valid->attach(new \Laminas\Validator\GreaterThan(['min' => 90]));

$valid->isValid(9); // true
$valid->isValid(99); // true
$valid->isValid(42); // false

"快速失败"验证器链

\Alley\Validator\FastFailValidatorChain 类类似于Laminas 验证器链,不同之处在于如果验证器失败,链会自动断开;没有 $breakChainOnFailure 参数。

与 Laminas 验证器链不同,验证器只能附加,不能前置,且没有 $priority 参数。

基本用法

$valid = new \Alley\Validator\FastFailValidatorChain([new \Laminas\Validator\LessThan(['max' => 10])]);
$valid->attach(new \Laminas\Validator\GreaterThan(['min' => 90]));

$valid->isValid(42); // false
count($valid->getMessages()); // 1

按操作符名称访问验证器

\Alley\Validator\ValidatorByOperator 允许您使用可读的操作符名称(如 REGEXNOT IN)访问验证器。

其主要用途是允许您编写接受可读操作符名称作为参数的函数,同时使用验证器。以下是从wp-match-blocks 库中的示例函数调用。

<?php

$images = \Alley\WP\match_blocks(
    $post,
    [
        'name' => 'core/image',
        'attrs' => [
            [
                'key' => 'credit',
                'value' => '/(The )?Associated Press/i',
                'operator' => 'REGEX',
            ],
        ],
    ],
);

支持的操作符名称包括:

  • CONTAINSNOT CONTAINS,它们使用区分大小写的搜索转发到 \Alley\Validator\ContainsString
  • INNOT IN,它们转发到 \Alley\Validator\OneOf
  • LIKENOT LIKE,使用不区分大小写的搜索,转发到 \Alley\Validator\ContainsString
  • REGEXNOT REGEX,转发到 \Laminas\Validator\Regex
  • ===!== 以及 \Alley\Validator\Comparison 支持的其他运算符。

任何未转发到其他验证器的运算符名称都必须是有效的 Comparison 运算符。

基本用法

$valid = new \Alley\Validator\ValidatorByOperator('REGEX', '/^foo/');
$valid->isValid('foobar'); // true

$valid = new \Alley\Validator\ValidatorByOperator('NOT IN', ['bar', 'baz']);
$valid->isValid('bar'); // false

$valid = new \Alley\Validator\ValidatorByOperator('!==', 42);
$valid->isValid(43); // true

验证器

AlwaysValid

\Alley\Validator\AlwaysValid 将所有输入标记为有效。当需要禁用完整验证或验证不切实际时,它可以用来满足类型要求。

支持选项

无。

基本用法

<?php

$valid = new \Alley\Validator\AlwaysValid();
$valid->isValid(42); // true
$valid->isValid(false); // true
$valid->isValid('abcdefghijklmnopqrstuvwxyz'); // true

Comparison

\Alley\Validator\Comparison 使用 PHP 比较运算符 将输入与另一个值进行比较。如果比较为真,则输入通过验证。输入放置在运算符的左侧。

支持选项

以下为 \Alley\Validator\Comparison 支持的选项

  • compared:输入比较的值。它放置在运算符的右侧。
  • operator:用于比较输入和 compared 的 PHP 比较运算符。

基本用法

<?php

$valid = new \Alley\Validator\Comparison(
    [
        'operator' => '<=',
        'compared' => 100,
    ]
);
$valid->isValid(101); // false

$valid = new \Alley\Validator\Comparison(
    [
        'operator' => '!==',
        'compared' => false,
    ]
);
$valid->isValid(true); // true

ContainsString

\Alley\Validator\ContainsString 是围绕 str_contains() 函数的验证器。每个验证器实例代表“针”字符串,并验证该字符串是否在输入“草堆”中找到。输入将自动转换为字符串。

支持选项

以下为 \Alley\Validator\ContainsString 支持的选项

  • needle:要搜索的字符串或 \Stringable 实例。它将在验证时自动转换为字符串。
  • ignoreCase:是否执行不区分大小写的搜索。默认为 False。

基本用法

<?php

$valid = new \Alley\Validator\ContainsString(
    [
        'needle' => 'foo',
    ],
);

$valid->isValid('foobar'); // true
$valid->isValid('barbaz'); // false

DivisibleBy

\Alley\Validator\DivisibleBy 允许您验证输入是否可以整除给定的数值。输入将自动转换为整数。

支持选项

以下为 \Alley\Validator\DivisibleBy 支持的选项

  • divisor:输入除以的值。它将自动转换为整数。

基本用法

<?php

$valid = new \Alley\Validator\DivisibleBy(
    [
        'divisor' => 3,
    ],
);

$valid->isValid(9); // true
$valid->isValid(10); // false

Not

Alley\Validator\Not 反转给定验证器的有效性。它允许创建测试输入是否为“不是之一”等验证器,而不仅仅是“之一”。

支持选项

无。

基本用法

<?php

$origin = new \Alley\Validator\OneOf(['haystack' => ['foo', 'bar']]);
$valid = new \Alley\Validator\Not($origin, 'The input was invalid.');

$valid->isValid('foo'); // false
$valid->isValid('baz'); // true

OneOf

Alley\Validator\OneOf 验证一个包含标量值的数组是否包含输入。

OneOf\Laminas\Validator\InArray 的简化版本,它只接受“草堆”中的标量值并执行严格比较。作为回报,它产生一个更友好的错误消息,列出允许的值。

支持选项

以下为 \Alley\Validator\OneOf 支持的选项

  • haystack:要搜索输入的数组。

基本用法

<?php

$valid = new \Alley\Validator\OneOf(['haystack' => ['one', 'two', 'three']]);
$valid->isValid('four'); // false
$valid->getMessages(); // ['notOneOf' => 'Must be one of [one, two, three] but is four.']

类型

\Alley\Validator\Type 允许您验证输入是否为给定的 PHP 类型。如果输入是期望的类型,则通过验证。

此验证器灵感来源于 PHPUnit 的 \PHPUnit\Framework\Constraint\IsType 类。

支持选项

以下为 \Alley\Validator\Type 支持的选项

  • type:期望的 PHP 类型。支持类型包括 arrayboolbooleancallabledoublefloatintintegeriterablenullnumericobjectrealresourcestringscalar

基本用法

<?php

$valid = new \Alley\Validator\Type(['type' => 'callable']);
$valid->isValid('date_create_immutable'); // true

$valid = new \Alley\Validator\Type(['type' => 'bool']);
$valid->isValid([]); // false

WithMessage

Alley\Validator\WithMessage 允许您用自定义的失败代码和消息装饰验证器,替换验证器的常规失败消息。

支持选项

无。

基本用法

<?php

$origin = new \Laminas\Validator\GreaterThan(42);
$valid = new \Alley\Validator\WithMessage('tooSmall', 'Please enter a number greater than 42.', $origin);

$valid->isValid(41); // false
$valid->getMessages(); // ['tooSmall' => 'Please enter a number greater than 42.']

关于

许可证

GPL-2.0-or-later

维护者

Alley Interactive