mini\Validator\Validator class

Documentation

Composable validation builder

Build reusable validators that can be composed for complex validation scenarios. Inspired by JSON Schema, validators are permissive by default and rules are added incrementally.

Basic Usage

// Simple field validator with fluent API
$emailValidator = (new Validator())->required()->email();

if ($error = $emailValidator->isInvalid($_POST['email'])) {
    echo "Error: $error";
}

Entity Validation

class User {
    public static function validator(): Validator {
        return (new Validator())
            ->forProperty('username',
                (new Validator())->isString()->required()->minLength(3))
            ->forProperty('email',
                (new Validator())->required()->email())
            ->forProperty('age',
                (new Validator())->isInt()->minVal(18));
    }
}

// Direct field validation
if ($error = User::validator()->username->isInvalid($_POST['username'])) {
    echo "Username error: $error";
}

// Full entity validation
$errors = User::validator()->validate($_POST);
if ($errors) {
    // ['username' => Translatable, 'email' => Translatable, ...]
}

Composition & Reusability

// Define reusable validators
$emailValidator = (new Validator())->required()->email();
$passwordValidator = (new Validator())->required()->minLength(8);

// Compose into entity validator
$userValidator = (new Validator())
    ->forProperty('email', $emailValidator)
    ->forProperty('password', $passwordValidator);

// Partial validation (returns clone)
$profileValidator = User::validator()->withoutFields(['password']);

Design Philosophy

  • Permissive by default: Empty validator accepts any value
  • Non-smart: Doesn't prevent contradictory rules (e.g., isInt()->isString())
  • Fail fast: Returns first error for field validation
  • Nullable aware: Optional fields skip validation when empty
  • Lazy translation: Error messages (Translatable) aren't converted until displayed

Inheritance

Implements: JsonSerializable

Properties (7)

private array $rules
private array $propertyValidators
private array $patternPropertyValidators
private ?mini\Validator\Validator $additionalPropertiesValidator
private bool $allowAdditionalProperties
private bool $isRequired
private Stringable|string|null $requiredMessage

Methods (54)

Magic property access for field validators

Invokable: $validator($value)

Check if value is invalid

Validate a single rule

Validate entire structure (alias for isInvalid)

Mark field as required

Set a rule immutably (clones before mutation)

Set JSON Schema type(s)

Validate string format (JSON Schema: format)

Validate minimum string length

Validate maximum string length

Validate exact value match (JSON Schema: const)

Validate value is in allowed list (JSON Schema: enum)

Validate minimum value (inclusive) - JSON Schema: minimum

Validate maximum value (inclusive) - JSON Schema: maximum

Validate minimum value (exclusive) - JSON Schema: exclusiveMinimum

Validate maximum value (exclusive) - JSON Schema: exclusiveMaximum

Validate number is a multiple of value (JSON Schema: multipleOf)

Validate minimum array length (JSON Schema: minItems)

Validate maximum array length (JSON Schema: maxItems)

Validate minimum number of object properties (JSON Schema: minProperties)

Validate maximum number of object properties (JSON Schema: maxProperties)

Validate dependent required properties (JSON Schema: dependentRequired)

Validate array has unique items (JSON Schema: uniqueItems)

Validate all array items against a schema (JSON Schema: items)

Validate additional items beyond tuple schema (JSON Schema: additionalItems)

Validate minimum number of items matching a schema (JSON Schema: minContains)

Validate maximum number of items matching a schema (JSON Schema: maxContains)

Validate value matches regex pattern

Validate against any of the provided validators (JSON Schema: anyOf)

Validate against all of the provided validators (JSON Schema: allOf)

Validate against exactly one of the provided validators (JSON Schema: oneOf)

Validate that value does NOT match validator (JSON Schema: not)

Custom validation callback (for server-side validation only)

Add validator for object property or array key

Define validators for multiple properties (JSON Schema: properties)

Validate properties matching regex patterns (JSON Schema: patternProperties)

Validate additional properties (JSON Schema: additionalProperties)

Remove fields from validation

Keep only specified fields for validation

Check if a value is object-like (PHP object or associative array)

Validate using custom closure

Documentation missing

Documentation missing

Documentation missing

Documentation missing

Documentation missing

Documentation missing

Documentation missing

Documentation missing

Documentation missing

Export validator as JSON Schema (JsonSerializable interface)

Source

src/Validator/Validator.php:79-1153