jane-php/json-schema-runtime
Runtime support library for code generated by Jane JsonSchema. Provides shared classes used by Jane-generated PHP clients and models (serialization, validation, etc.). See Jane docs for usage and contribute via the main janephp repository.
ValidateJsonSchema).rules() with schema validation in Illuminate\Foundation\Http\FormRequest.JsonResource::toArray().Illuminate\Queue\Jobs\Job::handle().Schema facade for cleaner syntax (e.g., Schema::validate($data, 'user')).HttpTests and Pest for schema validation assertions.save() or create().league/uri v6/7 may conflict with Laravel’s symfony/routing.symfony/serializer v8.x requires Laravel 10+ (released 2023).ValidationException.symfony/validator (feature-rich, actively maintained).zod-php/zod (modern, type-safe).respect/validation (lightweight).symfony/validator or zod-php/zod for better maintenance.symfony/serializer if needed for Laravel 9.config/schemas/v1/, Git submodules).Validator::make()).Illuminate\Validation\Validator with schema-driven rules.AppServiceProvider:
$this->app->singleton(JsonSchemaValidator::class, fn() => new \Jane\JsonSchemaRuntime\Validator());
Schema::validate($request->all(), 'schemas/user-request.yaml');
HttpTests:
public function test_user_creation_validates_schema() {
$response = $this->postJson('/users', ['name' => 'John']);
$response->assertValid(); // Uses Laravel’s validation helpers
}
Pest for schema validation assertions:
test('schema validation fails on invalid data', function () {
$validator = app(JsonSchemaValidator::class);
expect($validator->validate(['invalid' => 'data'], 'schemas/user-request.yaml'))
->toBeFalse();
});
FormRequest classes with schema validation.POST /api/users).GET /api/users/{id}).composer.json, but test with PHP 8.2/8.3 for BC breaks.symfony/serializer v8.x compatibility.symfony/serializer to v6.x if needed.config/schemas/api.yaml).symfony/console, symfony/http-foundation, etc. Test for version skew.Illuminate\Support\Facades\URL.config/schemas/ (YAML/JSON).config/schemas/user-request.yaml for POST /users.// app/Services/JsonSchemaValidator.php
class JsonSchemaValidator {
public function validate(array $data, string $schemaPath): bool {
$schema = Yaml::parseFile($schemaPath);
$validator = new \Jane\JsonSchemaRuntime\Validator();
return $validator->validate($data, $schema);
}
}
// app/Http/Middleware/ValidateJsonSchema.php
public function handle(Request $request, Closure $next) {
$validator = app(JsonSchemaValidator::class);
$schemaPath = "schemas/{$request->route()->getName()}.yaml";
if (!$validator->validate($request->all(), $schemaPath)) {
abort(422, 'Schema validation failed');
}
return $next($request);
}
// app/Http/Requests/StoreUserRequest.php
public function authorize(): bool { return true; }
public function rules(): array { return []; } // Empty; use schema instead
public function validateSchema(): void {
$validator = app(JsonSchemaValidator::class);
if (!$validator->validate($this->all(), 'schemas/user-request.yaml')) {
abort(422, 'Invalid request data');
}
}
test('schema validation rejects invalid data', function () {
$response = $this->postJson('/users', ['invalid' => 'data']);
$response->assertUnprocessable();
});
How can I help you explore Laravel packages today?