polus / adr-json-schema-input
基于json schema创建输入验证的辅助工具
1.0.0
2019-01-28 19:09 UTC
Requires
- php: >=7.2.0
- ext-json: *
- opis/json-schema: ^1.0
- psr/http-message: ^1.0
- psr/log: ^1.0
This package is auto-updated.
Last update: 2024-08-29 05:06:28 UTC
README
辅助类,用于简化使用JsonSchema进行请求输入验证
安装
composer require polus/adr-json-schema-input
用法
SchemaMap
要使用抽象输入类,您需要实现一个SchemaMap
,它将包含有关架构的信息以及加载它们的方式。
use Polus\JsonSchemaInput\SchemaMapInterface; class SchemaMap implements SchemaMapInterface { public const SCHEMA_NS = 'https://schema_ns/schemas/'; public const TEST_SCHEMA = 'subDirectory/test.json'; private const ALLOWED_SCHEMAS = [ self::TEST_SCHEMA, ]; public function getDefaultNamespace(): string { return self::SCHEMA_NS; } /** * @return string[] */ public function getSchemaPaths(): array { return [ 'path to where schemas are stored', ]; } public function exists(string $schema): bool { return in_array($schema, self::ALLOWED_SCHEMAS, true); } public function get(string $schema): string { if ($this->exists($schema)) { return self::SCHEMA_NS . $schema; } return ''; } public function load(string $schema): ?array { foreach ($this->getSchemaPaths() as $path) { if (file_exists($path.'/'.$schema)) { return json_decode($path.'/'.$schema, true); } } return null } }
输入
use Psr\Http\Message\ServerRequestInterface; use Polus\JsonSchemaInput\Input\AbstractJsonSchemaInput; class TestInput extends AbstractJsonSchemaInput { public function __invoke(ServerRequestInterface $request) { $body = $this->validate($request, SchemaMap::TEST_SCHEMA); return $body; } }
如果验证失败,它将抛出带有JsonSchema错误消息的DomainException。