sentinelphp / schema
JSON Schema generation, merging, and validation library
v1.0.1
2026-04-27 12:16 UTC
Requires
- php: >=8.2
- opis/json-schema: ^2.3
Requires (Dev)
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^11.0 || ^12.0
README
JSON Schema generation, merging, and validation library.
Installation
composer require sentinelphp/schema
Features
- Generate JSON Schema from sample data
- Merge multiple schemas together
- Validate data against schemas
Usage
Schema Generation
use SentinelPHP\Schema\Generator; use SentinelPHP\Schema\Config\GeneratorConfig; $generator = new Generator(); $data = [ 'id' => 123, 'name' => 'John Doe', 'email' => 'john@example.com', 'created_at' => '2024-01-15T10:30:00Z', ]; $schema = $generator->generate($data); // Returns JSON Schema with inferred types and formats
Schema Merging
use SentinelPHP\Schema\Merger; $merger = new Merger(); $schema1 = ['type' => 'object', 'properties' => ['id' => ['type' => 'integer']]]; $schema2 = ['type' => 'object', 'properties' => ['name' => ['type' => 'string']]]; $merged = $merger->merge($schema1, $schema2); // Combines properties, widens types, intersects required fields
Schema Validation
use SentinelPHP\Schema\Validator; $validator = new Validator(); $schema = [ 'type' => 'object', 'properties' => [ 'email' => ['type' => 'string', 'format' => 'email'], ], 'required' => ['email'], ]; $result = $validator->validate(['email' => 'invalid'], $schema); if (!$result->isValid()) { foreach ($result->getErrors() as $error) { echo $error->path . ': ' . $error->message; } }
Partial Validation
Validate only the fields present in the payload:
$result = $validator->validatePartial($partialData, $schema);
Configuration
use SentinelPHP\Schema\Config\GeneratorConfig; $config = new GeneratorConfig( strictMode: true, // Require all observed fields nullableFields: false, // Don't allow null by default additionalProperties: false // Disallow extra properties ); $generator = new Generator(); $schema = $generator->generate($data, $config);
License
GPL v3 — see LICENSE for details