solophp / validator
PHP Data Validator
v4.2.0
2026-10-28 14:06 UTC
Requires
- php: ^8.3
- solophp/contracts: ^1.3
Requires (Dev)
- giggsey/libphonenumber-for-php-lite: ^8.13.1 || ^9.0
- phpstan/phpstan: ^2.0
- phpunit/phpunit: ^12.0
- solophp/request-handler: ^4.1
- squizlabs/php_codesniffer: ^4.0
Suggests
- giggsey/libphonenumber-for-php-lite: Required by the phone rule (^8.13.1 || ^9.0)
Provides
None
Conflicts
- giggsey/libphonenumber-for-php-lite: <8.13.1 || >=10.0
Replaces
None
This package is auto-updated.
Last update: 2026-10-28 19:48:37 UTC
README
Lightweight PHP validation library: rule strings compiled once, strict about configuration, one structured error per field.
Features
- Built-in Rules — required, required_if / with / without, prohibited_if, present, email, phone, uuid, date, min, max, in, regex and more
- Fails Fast — an unknown rule or a bad parameter throws on first use instead of silently validating nothing
- Structured Errors — at most one machine-readable error per field: the rule name and its parameters
- Custom Rules — callables or classes, registered in the constructor
- Stateless —
validate()returns the errors, so one instance can be shared across requests and workers - Request-Handler ready — the validator behind solophp/request-handler 4: the same rule grammar, the same reading of types
Installation
composer require solophp/validator
The phone rule also needs libphonenumber:
composer require giggsey/libphonenumber-for-php-lite
Quick Example
use Solo\Validator\Validator; $validator = new Validator(); $errors = $validator->validate( ['email' => 'user@example', 'username' => 'jo', 'age' => '25'], [ 'email' => 'required|email', 'username' => 'required|min:3|max:20', 'age' => 'integer|min_value:18', ], ); // [ // 'email' => [['rule' => 'email']], // 'username' => [['rule' => 'min', 'params' => ['3']]], // ] if ($errors === []) { echo "Validation passed!"; }
Documentation
Upgrading from 3.x? See UPGRADE.md.
Requirements
- PHP 8.3+
License
MIT License. See LICENSE for details.