codexsoft / transmission-schema
Schema配置、验证和规范化部分,是CodexSoft Transmission PHP库的一部分,用于构建HTTP JSON API
v2.0.3
2022-03-19 23:38 UTC
Requires
- php: ^8
- symfony/validator: ^5.1
Requires (Dev)
- phpunit/phpunit: ^9
- roave/security-advisories: dev-master
- dev-release/2.x
- dev-master
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v0.0.3
- v0.0.2
- v0.0.1
- dev-feature/open-api-converters
- dev-feature/dynamic-key-value-signatures
- dev-develop
- dev-feature/typecheck-validation-before-normalizing
- dev-feature/pre-separation
- dev-feature/open-api-generator
This package is auto-updated.
Last update: 2024-09-20 05:01:00 UTC
README
紧凑的可扩展库,用于基于JSON构建HTTP API。
提供基于symfony/validator组件的规范化验证功能。
安装
composer require codexsoft/transmission
原因
假设我们在控制器中有如下入站数据
$input = [ 'name' => 'John Doe', 'email' => 'john@example.com', 'pets' => [ [ 'kind' => 42, 'name' => 'Rex', ], [ 'kind' => 34, 'name' => 'Sunny', ] ], ];
- 我们将如何检查输入中的
pets
是否存在? - 我们将如何检查
name
是否为空或至少包含3个符号? - 我们将如何检查
email
是否格式正确? - 我们将如何检查
pets
至少有一个宠物? - 我们将如何检查
pets[n].kind
是否包含允许的值之一(15、34、42)? - 我们将如何处理这些违规行为并生成错误响应?
这个库允许你这样做
use CodexSoft\Transmission\Schema\Accept; $schema = Accept::json([ 'name' => Accept::string()->minLength(3), 'email' => Accept::email(), 'pets' => Accept::collection( Accept::json([ 'kind' => Accept::integer()->choices([15, 34, 42]), 'name' => Accept::string(), ]) ), ]); $result = $schema->validateNormalizedData($userInput); if ($result->getViolations()->count()) { return new JsonResponse($result->getViolations()); } $data = $result->getData();
这就对了!我们现在已经规范化了数据,可以进一步处理。
简介
此库支持许多标量数据类型定义和两种复杂类型定义:数组("集合")和哈希("json"),开箱即用。此库中数据类型定义称为Element
。你可以通过扩展AbstractElement
类来添加自己的数据类型。
要使用特定的元素,首先通过调用以下方式来实例化它
use CodexSoft\Transmission\Schema\Elements\BoolElement; $element = new BoolElement();
或者使用Accept
门面
use CodexSoft\Transmission\Schema\Accept; $boolean = Accept::bool();
每个元素都有一些基本属性
- 是否可以为空
- 是否为必填项
- 可选元素的默认值是什么
- 值类型是否必须严格匹配元素数据类型或可以自动转换
- 是否已弃用
- 标签(或,注释)
更具体的元素具有更具体的属性。例如:字符串的最小长度、整数的最大值、可以是空字符串等。
当整数开启严格类型检查时,'42'将生成对此元素的违规。
所有内置元素的列表
用法
布尔数据的基本规范化。
use CodexSoft\Transmission\Schema\Accept; $userInput = 'test'; $boolean = Accept::bool(); $result = $boolean->validateNormalizedData($userInput); $result->getViolations()->count(); // 0 $result->getData(); // true $strictBoolean = Accept::bool()->strict(); $result = $boolean->validateNormalizedData($userInput); $result->getViolations()->count(); // 1 $result->getData(); // 'test'
label
和deprecated
属性存在是出于历史原因,因为这个库最初是作为生成OpenApi schema的统一schema描述(检查codexsoft/transmission-openapi3)。
在使用规范化数据之前,请始终检查违规数量,因为在这种情况下,原始输入数据将存储在result.data
中。
不会自动抛出异常,但你可以编写一个包装器来强制在检测到违规时抛出异常,或者以其他方式处理这种情况。
测试
php ./vendor/bin/phpunit