league/json-guard
Unmaintained JSON Schema validator (draft 4) for PHP. Passes the full Draft 4 test suite, supports custom rule sets, and returns helpful errors with JSON Pointers. Consider opis/json-schema or swaggest/php-json-schema as alternatives.
Installation:
composer require league/json-guard
(Note: While unmaintained, this package remains functional for Laravel projects using Draft 4 JSON Schema.)
Basic Validation:
use League\JsonGuard\Validator;
$data = json_decode('{"name": "John", "age": 30}');
$schema = json_decode('{
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"}
},
"required": ["name"]
}');
$validator = new Validator($data, $schema);
Check Validation:
if ($validator->passes()) {
// Data is valid
} else {
$errors = $validator->errors(); // Array of ValidationError objects
}
Validate API request payloads or form submissions against structured schemas. Example:
$requestData = json_decode($request->getContent());
$validator = new Validator($requestData, $schema);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
Request Validation Middleware:
public function handle($request, Closure $next) {
$validator = new Validator(json_decode($request->getContent()), $schema);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
return $next($request);
}
Service Layer Validation:
public function create(Request $request) {
$data = json_decode($request->getContent());
$validator = new Validator($data, $this->schema);
if ($validator->fails()) {
throw new \InvalidArgumentException(json_encode($validator->errors()));
}
// Proceed with business logic
}
Dynamic Schema Loading:
$schema = json_decode(file_get_contents("schemas/{$request->route('schema')}.json"));
$validator = new Validator($data, $schema);
JsonGuardValidator trait to integrate with Laravel's validation system.ValidationError objects to Laravel's Validator format for consistency:
$laravelErrors = collect($validator->errors())
->map(fn($error) => [$error->data_path => $error->message])
->toArray();
league/json-reference for $ref support:
$dereferencer = League\JsonReference\Dereferencer::draft4();
$schema = $dereferencer->dereference('http://example.com/schema.json');
Data Type Mismatch:
json_decode() with true returns arrays, but JsonGuard expects objects.json_decode($json, false) (default) for object output.$data = json_decode('{"key": "value"}'); // Correct
$data = json_decode('{"key": "value"}', true); // Incorrect for JsonGuard
Circular References:
maxDepth (50).$validator->setMaxDepth(100);
Schema Validation:
$metaSchema = json_decode(file_get_contents('http://json-schema.org/schema'));
$schemaValidator = new Validator($yourSchema, $metaSchema);
data_path and schema_path in ValidationError to pinpoint issues in nested structures.DraftFour ruleset for custom validation logic:
$validator->getRuleset()->get('customKeyword')->addConstraint(new CustomConstraint());
$validator->getRuleset()->get('format')->addExtension('custom-format', new CustomFormatExtension());
$validator->getRuleset()->add('customKeyword', new CustomConstraint());
ValidationError or use middleware to transform errors into API-friendly responses.$this->app->singleton(Validator::class, function () {
return new Validator(json_decode('{}'), json_decode('{}'));
});
MaximumDepthExceededException for recursive data:
try {
$validator->validate();
} catch (\League\JsonGuard\Exception\MaximumDepthExceededException $e) {
// Handle circular reference
}
How can I help you explore Laravel packages today?