justinrainbow/json-schema
Validate JSON documents against JSON Schema in PHP. Supports Draft-3, Draft-4, Draft-6 and Draft-7 (coverage varies). Install via Composer and use JsonSchema\Validator to validate data with local file $ref schemas and inspect validation errors.
config/*.php) or environment variables (via json_decode).register() to preload schemas (e.g., from config/schema.json) and inject a Validator instance into the container.Illuminate\Foundation\Http\FormRequest to validate $request->all() against a schema.validate(Request $request, string $schemaPath)).save()/update() via observes([Model::class]).--json flags) during command execution.$dynamicRef, contentMediaType).CHECK_MODE_COERCE_TYPES modifies input data; ensure this aligns with business logic (e.g., API responses vs. internal processing).$ref: "https://...") introduce network dependencies; mock or stub for offline testing.resources/schemas/),400 Bad Request with detailed errors),Request objects in middleware/form requests.validate($data, $schema) in handle()).JsonSchema\Validator in PHPUnit tests for contract testing.Symfony\Component\Validator for hybrid validation.StorePostRequest against posts/schema.json.CHECK_MODE_COERCE_TYPES for type safety.config/schemas/ or a dedicated SchemaService.// app/Providers/SchemaServiceProvider.php
public function register()
{
$this->app->singleton(Validator::class, fn() => new Validator());
$this->app->bind(SchemaStorage::class, fn() => new SchemaStorage());
}
// app/Http/Middleware/ValidateSchema.php
public function handle(Request $request, Closure $next, string $schema)
{
$validator = app(Validator::class);
$validator->validate($request->json()->all(), $this->loadSchema($schema));
if (!$validator->isValid()) {
return response()->json(['errors' => $validator->getErrors()], 400);
}
return $next($request);
}
Route::middleware(['validate.schema:users/schema.json'])->group(function () {
Route::post('/users', [UserController::class, 'store']);
});
SchemaStorage with Redis).CHECK_MODE_VALIDATE_SCHEMA).justinrainbow/json-schema:^6.0 with PHP 7.4+.laravel/framework, spatie/laravel-activitylog).ext/json conflicts by ensuring json_decode is used consistently.SchemaStorage in a service provider.App\Exceptions\ValidationException).tests/Feature/SchemaValidationTest).schemas/v1/user.json).CHECK_MODE_STRICT for Draft-6 to enforce schema validity.justinrainbow/json-schema to a specific version (e.g., ^6.8) in composer.json.php-cs-fixer rule to enforce schema file formatting.roave/security-advisories to track PHP dependency vulnerabilities.getErrors() for detailed validation feedback.public function handle($request, Closure $next)
{
if (app()->environment('local') && $request->has('debug_schema')) {
$validator = app(Validator::class);
$validator->validate($request->all(), $this->loadSchema('debug.json'));
dd($validator->getErrors());
}
return $next($request);
}
README.md in config/schemas/ explaining each schema’s purpose.SchemaStorage).foreach ($request->json()->all() as $item) {
$validator->validate($item, $schema);
if (!$validator->isValid()) {
return response()->json(['errors' => $validator->getErrors()], 400);
}
}
file:// references for local schemasHow can I help you explore Laravel packages today?