轻量级PHP验证器,支持语言无关验证规则规范(LIVR)

dev-master 2017-09-25 14:02 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:52:50 UTC


README

Build Status

名称

Validator\LIVR - 支持语言无关验证规则规范(LIVR)的轻量级验证器

概述

常见用法

    require 'LIVR.php'
    Validator\LIVR::defaultAutoTrim(true);

    $validator  = new Validator\LIVR( [
        'name'      =>  'required',
        'email'     =>  [ 'required', 'email'],
        'gender'    =>  [ 'one_of'     => ['male', 'female'] ],
        'phone'     =>  [ 'max_length' => 10 ],
        'password'  =>  [ 'required', ['min_length' => 10] ],
        'password2' =>  [ 'equal_to_field' => 'password' ]
    ] );

    var $validData = $validator->validate($userData);

    if ($validData) {
        saveUser($validData);
    } else {
        $errors = $validator->getErrors();
    }

可以单独使用过滤器,也可以将它们与验证结合使用

    $validator = new Validator\LIVR([
        'email' => [ 'required', 'trim', 'email', 'to_lc' ]
    ]);

请随意注册自己的规则

    $validator = new Validator\LIVR([
        'password' => ['required', 'strong_password']
    ]);

    $validator->registerRules([ 'strong_password', function() {
        return function($value) {
            // We already have "required" rule to check that the value is present
            if ( !isset($value) || $value === '' ) {
                return;
            }

            if ( strlen($value) < 6 ) {
                return 'WEAK_PASSWORD'
            }
        }
    } ]);

描述

有关详细信息,请参阅 https://github.com/koorchik/LIVR

功能

  • 规则是声明性的且与语言无关
  • 每个字段可以有任意数量的规则
  • 一起返回所有字段的错误
  • 排除没有验证规则的字段
  • 具有验证复杂层次结构的可能性
  • 规则易于描述和理解
  • 返回可理解的错误代码(而不是错误消息)
  • 易于添加自己的规则
  • 规则可以更改输出结果(例如,“trim”、“nested_object”)
  • 多用途(用户输入验证、配置验证、契约编程等)

安装

使用Composer安装LIVR。创建composer.json文件,内容如下

    {
        "require": {
            "validator/livr": "dev-master"
        }
    }

类方法

new Validator\LIVR($livr, $isAutoTrim);

构造函数创建验证器对象。$livr - 验证规则。规则描述可在以下链接中找到 - https://github.com/koorchik/LIVR

$isAutoTrim - 要求验证器在验证之前修剪所有值。输出也将被修剪。如果isAutoTrim未定义(或为null),则使用默认autoTrim值。

Validator\LIVR::registerDefaultRules([ "rule_name" => ruleBuilder ])

ruleBuilder - 是一个函数引用,它将用于构建单个规则验证器。

    Validator\LIVR::registerDefaultRules([ 'my_rule' => function($arg1, $arg2, $arg3, $ruleBuilders) {
        // ruleBuilders - are rules from original validator
        // to allow you create new validator with all supported rules
        $validator = new Validator\LIVR($livr);
        $validator->registerRules($ruleBuilders)->prepare();

        return function($value, $allValues, &$outputArr) use ($validator) {
            ...
            if ($notValid) {
                return "SOME_ERROR_CODE";
            }
            else {

            }
        }
    } ]);

然后您可以使用 "my_rule" 进行验证

    [
        'name1' => 'my_rule' // Call without parameters
        'name2' => [ 'my_rule'  => arg1 ] // Call with one parameter.
        'name3' => [ 'my_rule'  => [arg1] ] // Call with one parameter.
        'name4' => [ 'my_rule'  => [ arg1, arg2, arg3 ] ] // Call with many parameters.
    ]

以下是 "max_number" 的实现

    function maxNumber($maxNumber) {
        return function($value) use($maxNumber) {
            // We do not validate empty fields. We have "required" rule for this purpose
            if ( !isset($value) || $value === '' ) {
                return;
            }

            // return error message
            if ( $value > $maxNumber ) {
                return 'TOO_HIGH';
            }
        };
    };
    LIVR\Validator->registerDefaultRules([ 'max_number' => $maxNumber ]);

验证器的所有规则都是相同的。它不区分“required”、“list_of_different_objects”和“trim”规则。因此,您可以使用任何您喜欢的规则扩展验证器。

Validator\LIVR::getDefaultRules();

返回包含验证器所有默认ruleBuilders的数组。您可以使用“registerRules”方法注册新规则或更新现有规则。

Validator\LIVR::defaultAutoTrim($isAutoTrim)

启用或禁用输入数据的自动修剪。如果开启,则每个新验证器实例将启用自动修剪选项。

对象方法

$validator->validate($input)

验证用户输入。成功时返回validData(仅包含描述了验证规则的数据)。失败时返回false。

    $validData = $validator->validate($input);
    $errors    = $validator->getErrors();

    if ($errors) {
        // Throw exceptions, write logs, show error messages, etc, using $errors
    } else {
        // Use $vaidData
    }

validator->getErrors()

返回错误数组。

    [
        "field1" => "ERROR_CODE",
        "field2" => "ERROR_CODE",
        ...
    ]

例如

    [
        "country"   =>  "NOT_ALLOWED_VALUE",
        "zip"       =>  "NOT_POSITIVE_INTEGER",
        "street"    =>  "REQUIRED",
        "building"  =>  "NOT_POSITIVE_INTEGER"
    ]

$validator->registerRules(["rule_name" => ruleBuilder])

$ruleBuilder - 是一个函数引用,它将被用于构建单个规则验证器。

有关规则示例,请参阅“Validator\LIVR::registerDefaultRules”。

$validator->registerAliasedRule([ "name" => $ruleName, "rules" => $livrRules, "error" => $errorCode ]);

轻松创建自定义规则,并在需要时分配自己的错误代码。请参阅LIVR规范中的rules-aliasing

    $validator->registerAliasedRule([
        "name"  => "adult_age",
        "rules" => [ "positive_integer", ["min_number" => 18] ],
        "error" => "WRONG_AGE"
    ]);

$validator->getRules()

返回包含验证器所有ruleBuilders的数组。您可以使用“registerRules”方法注册新规则或更新现有规则。

作者

  • antonfin (Anton Morozov)
  • k0stik (Konstantin Dvornik)
  • k33nice (Alexandr Krykovliuk)
  • koorchik (Viktor Turskyi)
  • wanderer (Danil Greben)

错误

请向GitHub报告任何错误或功能请求 https://github.com/WebbyLab/php-validator-livr

许可和版权

版权所有 2012 Viktor Turskyi。

本程序是自由软件;您可以在艺术许可证(2.0版)的条款下重新分发和/或修改它。您可以在以下网址获取完整许可证的副本:

http://www.perlfoundation.org/artistic_license_2_0

标准版本或修改版本的使用、修改和分发受本艺术许可证的约束。通过使用、修改或分发软件包,您接受本许可证。如果您不接受本许可证,请勿使用、修改或分发软件包。

如果您的修改版本是从除您以外的其他人的修改版本派生而来的,您仍然必须确保您的修改版本符合本许可证的要求。

本许可证不授予您使用版权持有者的任何商标、服务标志、商号或标志的权利。

本许可证包括非独占性、全球性、免费的专利许可,以制作、制造、使用、提出销售、销售、进口以及以其他方式转让软件包,涉及版权持有人可许可的任何专利权,这些专利权必然因软件包而被侵犯。如果您对任何声称软件包构成直接侵权或从属侵权的当事人提起专利诉讼(包括交叉诉讼或反诉),则本艺术许可证将在提起此类诉讼的日期终止。

免责声明:软件包由版权持有者和贡献者“按原样”提供,不提供任何明示或暗示的保证。在当地法律允许的范围内,不提供关于适销性、特定用途适用性或非侵权的暗示保证。除非法律要求,否则版权持有者或贡献者不对因使用软件包而产生的任何直接、间接、偶然或后果性损害承担责任,即使已告知此类损害的可能性。