davajlama/schemator
Composer 安装命令:
composer require davajlama/schemator
包简介
Schemator is lightweight library for data validation, sanitization and API documentation generation.
README 文档
README
Schemator is lightweight library for data validation, sanitization and API documentation generation.
- Data validation
- Data sanitization
- JSON Schema builder
- OpenApi builder
- Swagger builder
Data validation
Define schema:
$schema = new Schema(); $schema->prop('firstname')->string()->minLength(1)->maxLength(100)->required(); $schema->prop('surname')->string()->minLength(1)->maxLength(100)->required(); $schema->prop('sex')->enum(['MALE', 'FEMALE'])->required(); // OR #[RequiredAll] class Author { public function __construct( #[RangeLength(1, 100)] public string $firstname, #[RangeLength(1, 100)] public string $surname, #[Enum(['MALE', 'FEMALE'])] public string $sex, ) { } }
Data validation:
$payload = [ 'firstname' => 'Dave', 'surname' => 'Lister', 'sex' => 'MALE', ]; try { (new ArrayValidator())->validate($schema, $payload); // OR (new ArrayValidator())->validate((new SchemaBuilder())->build(Author::class), $payload); } catch (ValidationFailedException $e) { var_dump(MessageFormatter::toFlatten($e->getErrors())); }
Conditional validation:
$payload = [ 'firstname' => 'Dave', 'surname' => 'Lister', ]; $conditions = new ArraySchemaConditions(); $conditions->props('firstname', 'surname')->filledAllOrNone(); try { $conditions->validate($payload); } catch (ValidationFailedException $e) { var_dump(MessageFormatter::toFlatten($e->getErrors())); }
Data sanitization
$payload = [ 'firstname' => ' Dave ', 'surname' => 'Lister ', ]; $sanitizer = new ArrayDataSanitizer(); $sanitizer->props('firstname', 'surname')->trim(); $sanitizer->props('sex')->defaultIfNotExists('MALE'); $sanitizedPayload = $sanitizer->sanitize($payload);
JSON Schema builder
$builder = new JsonSchemaBuilder(); $builder->buildToJson($schema); // return JSON Schema specification
OpenApi builder
$api = new Api(); $api->info()->title('Example documentation'); $api->info()->description((string) file_get_contents(__DIR__ . '/description.md')); $api->info()->version('1.0.0'); Partition::apply($api, Partition::create(static function (Api $api): void { $ep = $api->get('/book-store/manage/attribute/list'); $ep->tags('BookStore', 'BookStore - Manage'); $ep->headerParam('x-api-key', true)->description('User api key'); $ep->queryParam('limit'); $ep->queryParam('offset'); $ep->jsonResponse200Ok(Attributes::class); $ep->jsonResponse401AuthorizationRequired(Problem::class); $ep->response500InternalServerError(); })); $builder = new OpenApiBuilder(new JsonSchemaBuilder()); $generator->build($api); // return OpenApi specification
Swagger builder
$swagger = new SwaggerBuilder(); echo $swagger->build($api, 'Bookstore API'); // return HTML Swagger documentation
统计信息
- 总下载量: 3.66k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 1
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2022-06-13
