akawalko/respect-validation-rules

为PHP中最出色的验证引擎创建的自定义规则。

v1.0.1 2023-12-01 21:41 UTC

This package is auto-updated.

Last update: 2024-09-30 01:38:12 UTC


README

这是什么

该仓库将是一套为出色的数据验证库Respect\Validation提供的附加规则。

安装

要求 php: >= 8.0

composer require akawalko/respect-validation-rules

用法

在您想要使用我的规则的位置安装此软件包后,您必须使用自动加载器并从命名空间导入类。

require_once 'vendor/autoload.php';

use Respect\Validation\Exceptions\NestedValidationException;
use Respect\Validation\Rules\AllOf;
use Respect\Validation\Validator as v;
use Respect\Validation\Factory;

要使用我的规则,您需要覆盖默认的工厂,以便它知道在哪个命名空间中查找新规则。

Factory::setDefaultInstance(
    (new Factory())
        ->withRuleNamespace('RespectValidationRules\\Rules')
        ->withExceptionNamespace('RespectValidationRules\\Exceptions')
);

规则

DynamicAttr

当您有一个使用__get()和__set()等魔术方法动态属性的对象时,您不能使用规则Attribute。这不会工作。解决方案是我的自定义方法DynamicAttr

让我们看看这个简短的示例

$dynamicObject = new ClassWithMagicMethods();
$dynamicObject->firstname = 'John Wesley';
$dynamicObject->lastname = 'Connor';
$dynamicObject->age = 36;

$validator = new AllOf(
    v::dynamicAttr(
        'firstname',
        v::stringType()
            ->alpha()
            ->length(2, 10)
    ),

    v::dynamicAttr(
        'lastname',
        v::stringType()
            ->length(null, 190)
        false // property can be undefined
    ),

    v::dynamicAttr(
        'age',
        v::intVal()
            ->min(18)
    )
);

try {
    $validator->assert($dynamicObject);
    echo "valid\n";
} catch (NestedValidationException $exception) {
    echo "not valid\n";
    print_r($exception->getMessages());
}

示例的完整代码可以在这里找到:examples/example_01.php