open-code-modeling / json-schema-to-php
解析 JSON 架构文件,并提供 API 以轻松从 JSON 架构生成代码。
0.3.0
2021-02-11 21:29 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- jangregor/phpstan-prophecy: ^0.8.0
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^0.12.33
- phpstan/phpstan-strict-rules: ^0.12.4
- phpunit/phpunit: ^9.2.6
- prooph/php-cs-fixer-config: ^0.3
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.4
README
解析 JSON 架构并提供 API 以轻松从 JSON 架构生成代码。
安装
$ composer require open-code-modeling/json-schema-to-php --dev
使用
假设你有一个这样的 JSON 架构。
{
"type": "object",
"required": ["buildingId", "name"],
"additionalProperties": false,
"definitions": {
"name": {
"type": ["string", "null"]
}
},
"properties": {
"buildingId": {
"type": "string",
"pattern": "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$"
},
"name": {
"$ref": "#/definitions/name"
}
}
}
从解析的 JSON 创建 TypeSet 定义
$decodedJson = \json_decode($jsonSchema, true); $typeSet = Type::fromDefinition($decodedJson); /** @var ObjectType $type */ $type = $typeSet->first(); $type->additionalProperties(); // false $properties = $type->properties(); /** @var TypeSet $buildingIdTypeSet */ $buildingIdTypeSet = $properties['buildingId']; /** @var StringType $buildingId */ $buildingId = $buildingIdTypeSet->first(); $buildingId->name(); // buildingId $buildingId->type(); // string $buildingId->pattern(); // ^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$ $buildingId->isRequired(); // true $buildingId->isNullable(); // false /** @var TypeSet $nameTypeSet */ $nameTypeSet = $properties['name']; /** @var ReferenceType $name */ $name = $nameTypeSet->first(); $resolvedTypeSet = $name->resolvedType(); /** @var StringType $resolvedType */ $resolvedType = $resolvedTypeSet->first(); $resolvedType->name(); // name $resolvedType->type(); // string $resolvedType->isRequired(); // true $resolvedType->isNullable(); // true // ...
请参阅 OpenCodeModeling\JsonSchemaToPhp\Type 类和测试以获取更多信息。