polus/adr-json-schema-input

基于json schema创建输入验证的辅助工具

1.0.0 2019-01-28 19:09 UTC

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。