ride / lib-validation
Ride框架的验证库
Requires
- ride/lib-reflection: ^1.0.0
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; }
此约束将修剪并要求name和description属性通过验证。
或约束(或)
《或约束》定义了一组属性,其中至少有一个必须提供。在约束时,如果没有任何一个属性提供,它将对所有属性添加一个验证错误。
<?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; }
当firstName和displayName都为空时,此约束将失败。
等于约束(等于)
《等于约束》定义了一组必须具有相同值的属性。当要求重复新密码时非常有用。
<?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; }
当password和repeatPassword不是相同的值时,此约束将失败。
条件约束(条件)
《条件约束》是一种通用约束,只有当定义的属性包含特定值时才进行验证。对于依赖于类型或状态的属性非常有用。
<?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; }
此约束将修剪并要求name和description属性。同时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