laurynasgadl / php-validator
Array value validation library for PHP
Installs: 451 773
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 3
Open Issues: 0
pkg:composer/laurynasgadl/php-validator
Requires
- php: >=8.0
- laurynasgadl/travers: ^2.0
Requires (Dev)
- phpunit/phpunit: ^10.0
README
inspired by Laravel's form validation
use Luur\Validator\Validator; use Luur\Validator\Rules\Concrete\MinRule; use Luur\Validator\Rules\Concrete\RequiredRule; use Luur\Validator\Exceptions\ValidationFailed; $validator = new Validator(); $rules = [ 'client_id' => 'required|integer', 'amount' => [new RequiredRule(), new MinRule(0)], 'count' => 'between:-12,50', 'details' => 'array|required', '*.name' => 'string|required', ]; $params = [ 'client_id' => 12345, 'amount' => 1234, 'details' => [ 'name' => 'John Doe', ], ]; try { $allParams = $validator->validate($rules, $params); $validatedParams = $validator->validated(); } catch (ValidationFailed $exception) { var_dump($exception->getMessage()); }
Installation
composer require laurynasgadl/php-validator
Documentation
Rules
Custom rules
use Luur\Validator\Rules\AbstractRule; use Luur\Validator\Validator; class CustomRule extends AbstractRule { /** * @param mixed $value * @return bool */ public function passes($value) { return true; } } $validator = new Validator(); $params = ['test' => 123]; $result = $validator->validate([ 'test' => new CustomRule(), ], $params);
You can also register the rule to be able to use it as a string:
use Luur\Validator\Rules\AbstractRule; use Luur\Validator\Validator; class CustomRule extends AbstractRule { /** * @param mixed $value * @return bool */ public function passes($value) { return true; } } $validator = new Validator(); $validator->registerRule(CustomRule::getSlug(), CustomRule::class); $params = ['test' => 123]; $result = $validator->validate([ 'test' => 'test', ], $params);
Existing rules
array : the value needs to be an array
between:{from_size},{to_size} : the value needs to be between the given range
float : the value needs to be a float
integer : the value needs to be an integer
max:{max_size} : the value needs to be less or equal to the given amount
min:{min_size} : the value needs to be greater or equal to the given amount
required : the parameter needs to exist in the data set
required_with:{param_1}... : the parameter needs to exist in the data set if all the other parameters exist
required_without:{param_1}... : the parameter needs to exist in the data set if one of the other parameters do not exist
size : the size of the value needs to be equal to the given amount. The size of a string is its length, the size of an array is the number of elements inside it, the size of a boolean is 0 or 1.
string : the value needs to be a string
boolean : the value needs to be a boolean
numeric : the value needs to be a numeric
default:{value} : the rule will always be applied first, meaning, params can successfully pass required rules even if their value is not set or is null
alpha_dash : the value can only be made up of uppercase and lowercase letters, numbers and - or _ symbols
alpha_numeric : the value can only be made up of uppercase and lowercase letters and numbers
regex:{pattern} : the value needs to match the given pattern
email : the value needs to be an email
url : the value needs to start with http:// or https:// and only contain URL-valid symbols
ip : the value needs to be an IP address
Custom messages
You can set custom validation messages either via the Validator constructor or the validate method:
use Luur\Validator\Validator; $validator = new Validator(); $rules = [ 'options.*.key' => 'string|required', ]; $params = [ 'options' => [ [ 'key' => 'passes', 'value' => true, ], [ 'key' => ['passes'], 'value' => false, ], ], ]; $messages = [ 'options.*.key.string' => 'Option key should be a string', ]; $validator->validate($rules, $params, $messages);