ride/lib-validation

Ride框架的验证库

1.6.0 2024-06-26 09:10 UTC

README

PHP Ride框架的验证库。

该库包含的内容

过滤器

Filter接口用于预先处理一个值以自动修复输入。如果过滤器无法处理输入类型,则应返回原始值。

有可用的不同实现。

AllowCharacterFilter (字符)

从一个字符串中过滤掉所有不允许的字符。

此过滤器有以下选项

  • characters: 所有允许的字符,在此字符串中找不到的字符将被移除(字符串)

LowerCaseFilter (小写)

将所有大写字母转换为小写。

此过滤器没有选项。

ReplaceFilter (替换)

替换字符串中的值。

此过滤器有以下选项

  • search: 要搜索的字符串(字符串)
  • replacement: 替换搜索到的匹配项(字符串|可选)

SafeStringFilter (安全字符串)

  • replacement: 替换特殊字符,默认为 -(字符串|可选)
  • lower: 转换为小写,默认为 true(布尔值|可选)

StripTagsFilter (stripTags)

从字符串中删除HTML和PHP标签,使用PHP的内部 strips_tags 函数

此过滤器有以下选项

  • allowedTags: 一组允许且不会被删除的HTML标签,例如: <p><strong>

TrimFilter (trim)

从提供的值中删除空格。

此过滤器有以下选项

  • trim.lines: 删除所有行,或提供的值如果是数组则删除值(布尔值|可选)
  • trim.empty: 删除空行或值,仅在 trim.lines 启用时删除(布尔值|可选)

UpperCaseFilter (大写)

将所有小写字母转换为大写。

此过滤器没有选项。

验证器

Validator接口用于验证单个值。

有可用的不同实现。

ClassValidator (类)

检查提供的字符串是否是有效的类名

此验证器有以下选项

  • class: 提供的类应实现或扩展的类(字符串|可选)
  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.class: 默认错误消息
  • error.validation.class.extends: 当类未扩展所需的类时
  • error.validation.class.implements: 当类未实现所需的接口时

DsnValidator (dsn)

检查提供的字符串是否是有效的DSN。

此验证器有以下选项

  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.dsn: 默认错误消息(字符串|可选)
  • error.validation.required: 必填错误信息(字符串|可选)

EmailValidator(电子邮件)

检查提供的值是否为有效的电子邮件地址。

此验证器有以下选项

  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.email: 默认错误信息
  • error.validation.required: 必填错误信息

FileExtensionValidator(文件扩展名)

检查提供的路径字符串是否具有允许的扩展名。

此验证器有以下选项

  • extensions: 允许的扩展名(数组)
  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.file.extension: 默认错误信息
  • error.validation.required: 必填错误信息

JsonValidator(JSON)

检查JSON字符串是否有效。

此验证器有以下选项

  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.json: 默认错误信息
  • error.validation.required: 必填错误信息

MinMaxValidator(最小最大值)

检查提供的数值是否在提供的范围内。

此验证器有以下选项

  • error.minimum: 值小于最小值时的错误代码(字符串|可选)
  • error.maximum: 值大于最大值时的错误代码(字符串|可选)
  • error.minimum.maximum: 值不在最小值和最大值之间时的错误代码(字符串|可选)
  • error.numeric: 值不是数值时的错误代码(字符串|可选)
  • minimum: 最小值(数值|可选)
  • maximum: 最大值(数值|可选)
  • required: 标志以查看值是否必需(布尔值|可选)

注意:最小值和最大值都是可选的,但至少需要提供一个。最小值和最大值的值包含在范围内。

此验证器生成以下错误

  • error.validation.minimum: 当值小于提供的最小值时
  • error.validation.maximum: 当值大于提供的最大值时
  • error.validation.minmax: 当值小于提供的最小值或大于提供的最大值时
  • error.validation.required: 必填错误信息

NumericValidator(数值)

检查提供的值是否为数值。

此验证器有以下选项

  • error.numeric: 值不是数值时的错误代码(字符串|可选)
  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.numeric: 默认错误信息
  • error.validation.required: 必填错误信息

RegexValidator(正则表达式)

检查提供的字符串是否与正则表达式匹配。

此验证器有以下选项

  • error.regex: 当值未匹配正则表达式时的错误代码(字符串|可选)
  • error.required: 当必需的值为空时的错误代码(字符串|可选)
  • regex: 要匹配的正则表达式(字符串)
  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.regex: 默认错误信息
  • error.validation.required: 必填错误信息

RequiredValidator(必需)

检查是否提供了值

此验证器有以下选项

  • error.required: 当未提供值时的错误代码(字符串|可选)

此验证器生成以下错误

  • error.validation.required: 必填错误信息

SizeValidator(大小)

检查提供的字符串长度或提供的数组大小。

此验证器有以下选项

  • minimum: 最小值(数值|可选)
  • maximum: 最大值(数值|可选)

注意:最小值和最大值都是可选的,但至少需要提供一个。最小值和最大值的值包含在范围内。

此验证器生成以下错误

  • error.validation.maximum.array: 当数组元素数量大于提供的最大值时
  • error.validation.maximum.string: 当字符串大小大于提供的最大值时
  • error.validation.minimum.array: 当数组元素数量小于提供的最小值时
  • error.validation.minimum.string: 当字符串大小小于提供的最小值时
  • error.validation.minmax.array: 当数组元素数量小于提供的最小值或大于提供的最大值时
  • error.validation.minmax.string: 当字符串大小小于提供的最小值或大于提供的最大值时
  • error.validation.object: 当值为对象时

UrlValidator(URL)

检查提供的字符串是否为有效的URL。

此验证器有以下选项

  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.required: 必填错误信息
  • error.validation.url: 默认错误信息

WebsiteValidator(网站)

检查提供的字符串是否为有效的网站。这与URL验证器相同,但限制为http(s)://。

此验证器有以下选项

  • required: 标志以查看值是否必需(布尔值|可选)

此验证器生成以下错误

  • error.validation.required: 必填错误信息
  • error.validation.website: 默认错误信息

约束

Constraint接口用于验证数据容器。数据容器可以是数组或对象。

有可用的不同实现。

GenericConstraint(通用)

《通用约束》是过滤器和验证器的组合,可以应用于数据容器特定属性。

<?php

use ride\library\validation\factory\ValidationFactory;

function foo(ValidationFactory $factory) {
    $trimFilter = $factory->createFilter('trim');
    $requiredValidator = $factory->createValidator('required');
    
    $constraint = $factory->createConstraint('generic');
    $constraint->addFilter($trimFilter, 'name');
    $constraint->addFilter($trimFilter, 'description');
    $constraint->addValidator($requiredValidator, 'name');
    $constraint->addValidator($requiredValidator, 'description');
    
    return $constraint;
}

此约束将修剪并要求namedescription属性通过验证。

或约束(或)

《或约束》定义了一组属性,其中至少有一个必须提供。在约束时,如果没有任何一个属性提供,它将对所有属性添加一个验证错误。

<?php

use ride\library\validation\factory\ValidationFactory;

function foo(ValidationFactory $factory) {
    $constraint = $factory->createConstraint('or');
    $constraint->addProperty('firstName');
    $constraint->addProperty('displayName');
    
    // optionally, you can override the default error code
    $constraint->setError('error.validation.custom');
    
    return $constraint;
}

firstNamedisplayName都为空时,此约束将失败。

等于约束(等于)

《等于约束》定义了一组必须具有相同值的属性。当要求重复新密码时非常有用。

<?php

use ride\library\validation\factory\ValidationFactory;

function foo(ValidationFactory $factory) {
    $constraint = $factory->createConstraint('equals');
    $constraint->addProperty('password');
    $constraint->addProperty('repeatPassword');
    
    // optionally, you can override the default error code
    $constraint->setError('error.validation.custom');
    
    return $constraint;
}

passwordrepeatPassword不是相同的值时,此约束将失败。

条件约束(条件)

《条件约束》是一种通用约束,只有当定义的属性包含特定值时才进行验证。对于依赖于类型或状态的属性非常有用。

<?php

use ride\library\validation\factory\ValidationFactory;

function foo(ValidationFactory $factory) {
    $requiredWebsiteValidator = $factory->createValidator('website', array('required' => true));
    
    $constraint = $factory->createConstraint('conditional');
    $constraint->addValueCondition('type', 'url');
    $constraint->addValidator($requiredWebsiteValidator, 'url');
    
    return $constraint;
}

type属性设置为"url"时,此约束将要求url属性。

链约束(链)

《链约束》用于将不同的约束组合在一起成为一个。用于构建复杂数据类型的完整验证非常有用。

<?php

use ride\library\validation\factory\ValidationFactory;

function createConstraint(ValidationFactory $factory) {
    $trimFilter = $factory->createFilter('trim');
    $requiredValidator = $factory->createValidator('required');
    $requiredWebsiteValidator = $factory->createValidator('website', array('required' => true));
    
    $generalConstraint = $factory->createConstraint('generic');
    $generalConstraint->addFilter($trimFilter, 'name');
    $generalConstraint->addFilter($trimFilter, 'description');
    $generalConstraint->addValidator($requiredValidator, 'name');
    $generalConstraint->addValidator($requiredValidator, 'description');
    $generalConstraint->addValidator($requiredValidator, 'type');
    
    $typeUrlConstraint = $factory->createConstraint('conditional');
    $typeUrlConstraint->addValueCondition('type', 'url');
    $typeUrlConstraint->addFilter($trimFilter, 'url');
    $typeUrlConstraint->addValidator($requiredWebsiteValidator, 'url');
    
    $typeNodeConstraint = $factory->createConstraint('conditional');
    $typeNodeConstraint->addValueCondition('type', 'node');
    $typeNodeConstraint->addValidator($requiredWebsiteValidator, 'node');
    
    $chain = $factory->createConstraint('chain');
    $chain->addConstraint($generalConstraint);
    $chain->addConstraint($typeUrlConstraint);
    $chain->addConstraint($typeNodeConstraint);
    
    return $chain;
}

此约束将修剪并要求namedescription属性。同时type属性也是必需的。当type属性的值为"url"时,修剪后的url属性是必需的。同样,当type属性的值为"node"时,也必需修剪后的node属性。

ValidationFactory

《验证工厂》用于从本库构造新的验证实例。您可以使用它基于名称创建过滤器、验证器和约束。

ValidationError

《验证错误》是单个验证器的错误。验证器将保留最后一次验证调用中的错误。约束将收集发生的错误并将它们收集在ValidationException中。

ValidationException

《验证异常》在约束实现完成后抛出。它包含所有发生的错误,可以完整地或仅针对特定属性获取。

代码示例

<?php

use ride\library\validation\exception\ValidationException;
use ride\library\validation\factory\ValidationFactory;

function foo(ValidationFactory $factory) {
    // filter some values
    $trimFilter = $factory->createFilter('trim');
    
    $result = $trimFilter->filter(null); // null
    $result = $trimFilter->filter($trimFilter); // $trimFilter
    $result = $trimFilter->filter('  My Title  '); // 'My Title'
    
    // validate some values
    $requiredValidator = $factory->createValidator('required');
    
    $result = $requiredValidator->isValid(null); // false
    $result = $requiredValidator->isValid($requiredValidator); // true
    
    // constrain a data container
    // we're using an array but this can be an object with getters and setters as well
    $data = array(
        'title' => ' My Title  ',
        'description' => null,
        'type' => 'url',
        'node' => null,
        'url' => null,
    );
    
    // see the chain constraint sample for the chain build up
    $constraint = createConstraint($factory);
    
    try {
        $result = $contraint->constrain($data);
    } catch (ValidationException $exception) {
        // url is required in this situation
        $result = $exception->getAllErrors();
        $result = $exception->getErrors('url');
    }
}

实现

对于更多示例,您可以查看以下库的实现

安装

您可以使用Composer来安装此库。

composer require ride/lib-validation