ddrv / dresscode
OpenAPI模式验证器
v1.1.5
2021-01-29 05:21 UTC
Requires
- php: >=7.2
- ext-json: *
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^8.5
- squizlabs/php_codesniffer: ^3.5
README
安装
composer require ddrv/dresscode
用法
<?php use Ddrv\DressCode\Action; use Ddrv\DressCode\DressCode; require 'vendor/autoload.php'; $validator = new DressCode(); $validator->validate(Action::output(), ['type' => 'string'], 'it is ok');
检查错误
<?php use Ddrv\DressCode\Action; use Ddrv\DressCode\DressCode; use Ddrv\DressCode\Exception\InvalidValueException; require 'vendor/autoload.php'; $validator = new DressCode(); $rule = [ 'type' => 'object', 'properties' => [ 'email' => [ 'type' => 'string', 'format' => 'email', ], 'login' => [ 'type' => 'string', 'minLength' => 5, 'maxLength' => 32, 'pattern' => '^[a-z\-]+$', ], 'birthday' => [ 'type' => 'string', 'format' => 'date', ], ], 'required' => ['email', 'login'], 'additionalProperties' => true, 'nullable' => true, ]; $data = [ 'email' => 'ivan', 'login' => 'ddrv', 'birthday' => '2020-02-30', ]; try { $validator->validate(Action::input(), $rule, $data); } catch (InvalidValueException $e) { foreach ($e->getErrors() as $error) { echo $error->getPath() . ': ' . $error->getMessage() . PHP_EOL; } } /* email: ivan is not a email login: string size must be between 5 to 32 symbols birthday: 2020-02-30 is not a date */
定义规则
<?php use Ddrv\DressCode\Action; use Ddrv\DressCode\DressCode; require 'vendor/autoload.php'; $validator = new DressCode(); $validator->setEntity('#/entities/email', [ 'type' => 'string', 'format' => 'email', ]); $validator->setEntity('#/entities/login', [ 'type' => 'string', 'minLength' => 5, 'maxLength' => 32, 'pattern' => '^[a-z\-]+$', ]); $validator->setEntity('#/entities/date', [ 'type' => 'string', 'format' => 'date', ]); $rule = [ 'type' => 'object', 'properties' => [ 'email' => [ '$ref' => '#/entities/email', ], 'login' => [ '$ref' => '#/entities/login', ], 'birthday' => [ '$ref' => '#/entities/date', ], 'password' => [ 'type' => 'string', 'minLength' => 8, 'maxLength' => 32, 'writeOnly' => true, ], ], 'required' => ['email', 'login'], 'additionalProperties' => true, 'nullable' => true, ]; $data = [ 'email' => 'ivan@ddrv.ru', 'login' => 'i-dudarev', 'password' => 'short', ]; $valid = $validator->validate(Action::input(), $rule, $data); // Error password $valid = $validator->validate(Action::output(), $rule, $data); // No error because password writeOnly $valid = $validator->validate(Action::input(), ['$ref' => '#/entities/date'], '2020-12-30');
注册字符串格式
<?php use Ddrv\DressCode\Action; use Ddrv\DressCode\Exception\WrongFormatException; use Ddrv\DressCode\Format\Format; use Ddrv\DressCode\DressCode; require 'vendor/autoload.php'; $validator = new DressCode(); $myEmailFormat = new class extends Format { public function check(string $value) : void{ if (!filter_var($value, FILTER_VALIDATE_EMAIL) !== false) { throw new WrongFormatException('email'); } } }; $validator->registerFormat('email', $myEmailFormat); $rule = [ 'type' => 'string', 'format' => 'email', ]; $validator->validate(Action::input(), $rule, 'ivan@ddrv.ru');
严格类型
使用Action::input(true)
和Action::output(true)
进行严格类型检查。
警告
如果检查的数据是
application/x-www-form-urlencoded
,则不要使用它。
支持类型
- 布尔值
- 数字
- 数字(格式
float
) - 数字(格式
double
) - 整数
- 整数(格式
int32
) - 整数(格式
int64
) - 字符串
- 字符串(格式
binary
) - 字符串(格式
byte
) - 字符串(格式
date
) - 字符串(格式
date-time
) - 字符串(格式
email
) - 字符串(格式
hostname
) - 字符串(格式
ip
) - 字符串(格式
ipv4
) - 字符串(格式
ipv6
) - 字符串(格式
uri
) - 字符串(格式
uuid
) - 数组
- 对象
支持的关键词
所有类型
- 可空
- 只读
- 只写
- 默认值(仅适用于对象属性)
整数和数字类型
- 最小值
- 最大值
- 最小值排除
- 最大值排除
- 可被整除
字符串类型
- 模式
- 最小长度
- 最大长度
- 枚举
数组类型
- 项目
- 最小项目数
- 最大项目数
- 唯一项目
对象类型
- 属性
- 必需
- 额外属性
- 最小属性数
- 最大属性数
支持引用
- $ref(仅在调用
setEntity()
方法后)
支持的泛型
- oneOf
- anyOf
- allOf
- not