This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
# Install dependencies
composer install
# Run static analysis
composer phpstan
# Generate PHPStan baseline for new violations
composer phpstan:baseline
# Run tests locally (requires vendor directory)
vendor/bin/codecept run unit
# Run specific test
vendor/bin/codecept run unit ValidatorTest.php
# Run tests with SLIC (if available)
slic use validation
slic composer install --ignore-platform-reqs
slic run unit --ext DotReporter-
Config (
src/Config.php): Static configuration manager- Must call
Config::setServiceContainer()before use - Initialize with
Config::initialize()to register rules
- Must call
-
Validator (
src/Validator.php): Main validation engine- Takes rules array, values array, and labels array
- Key methods:
passes(),fails(),validated(),errors() - Returns sanitized data via
validated()
-
ValidationRulesRegistrar: Rule registry accessed via service container
- Prevents duplicate rule registration
- Maps rule IDs to class implementations
- Strategy Pattern: Each rule implements
ValidationRuleinterface - Command Pattern: Rules can return
ExcludeValueorSkipValidationRulescommands - Abstract Factory: Rules created from strings via
fromString()method - Registry Pattern: Rules registered in
ValidationRulesRegistrar - Trait:
HasValidationRulesadds validation to value objects
Rules can be specified as:
- Strings:
'required','max:255','email' - Instances:
new Max(255),new Required() - Closures: Custom validation logic
Built-in rule categories:
- Basic: Required, Optional, Nullable, Exclude
- Type: Boolean, Integer, Numeric, Email, Currency, DateTime
- Comparison: Min, Max, Size, In, InStrict
- Conditional: ExcludeIf, NullableIf, OptionalIf (with Unless variants)
ValidationRule: Core rule interface with__invoke()methodSanitizer: Rules that modify values during validationValidatesOnFrontEnd: Rules that can serialize to JSON for client-side validationConditionalRule: Abstract base for conditional validation rules
- Uses
__()for internationalization with%TEXTDOMAIN%placeholder - Hook system via configurable prefix:
{prefix}register_validation_rules - Compatible with WordPress coding standards and PHPStan WordPress rules
Tests use custom assertions in TestCase:
assertValidationRulePassed($rule, $value, $values = [])assertValidationRuleFailed($rule, $value, $values = [])
Mock rules available for testing validators (e.g., MockRequiredRule).
- Create custom rules by implementing
ValidationRule - Register rules via WordPress action hook
- Custom exceptions via
Config::setValidationExceptionClass() - Extend
ConditionalRulefor conditional validation logic