jardissupport/validation

A flexible validation package for Domain-Driven Design with nested aggregates

Installs: 27

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/jardissupport/validation

v1.0.0 2026-02-25 17:32 UTC

README

Build Status License PHP Version PSR-4 PSR-12 Coverage

Part of the Jardis Ecosystem — A modular DDD framework for PHP

Validate complex object graphs without annotations, without interfaces, without magic. Use type-safe, reusable validators with an elegant fluent API — perfect for DDD aggregates, value objects, and nested entities.

Features

  • Recursive Object Graph Validation — Automatically traverses nested objects and collections
  • 20+ Production-Ready Validators — Email, IBAN, UUID, PhoneNumber, CreditCard, Range, and more
  • Fluent API with Static Factories — Type-safe configuration via Email::strict(), Uuid::v4(), Iban::sepa()
  • Circular-Reference Protection — Prevents infinite loops in cyclic object structures
  • No Interface Constraints — Validates arbitrary domain objects without interface requirements
  • Minimal Dependencies — Only PSR interfaces, optimized for performance

Installation

composer require jardissupport/validation

Quick Start

use JardisSupport\Validation\{ObjectValidator, ValidatorRegistry, CompositeFieldValidator};
use JardisSupport\Validation\Validator\{NotBlank, Email, Range};

class User
{
    public function __construct(
        private ?string $email = null,
        private ?int $age = null
    ) {}

    public function Email(): ?string { return $this->email; }
    public function Age(): ?int { return $this->age; }
}

$userValidator = (new CompositeFieldValidator())
    ->field('email')->validates(NotBlank::class)
                    ->validates(Email::class, Email::withDnsCheck())
    ->field('age')->validates(Range::class, Range::between(18, 120));

$validator = new ObjectValidator(
    (new ValidatorRegistry())->register(User::class, $userValidator)
);

$result = $validator->validate(new User('invalid', 15));

if (!$result->isValid()) {
    print_r($result->getErrors());
}

Documentation

Full documentation, examples and API reference:

-> jardis.io/docs/support/validation

Jardis Ecosystem

This package is part of the Jardis Ecosystem — a collection of modular, high-quality PHP packages designed for Domain-Driven Design.

Category Packages
Core Kernel, Entity, Workflow
Support DotEnv, Cache, Logger, Messaging, DbConnection, DbQuery, DbSchema, Validation, Factory, ClassVersion
Generic Auth
Tools Builder, Migration, Faker

-> Explore all packages

License

This package is licensed under the PolyForm Noncommercial License 1.0.0.

For commercial use, see COMMERCIAL.md.

Jardis Ecosystem by Headgent Development