1. Go to this page and download the library: Download elie29/validator library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
elie29 / validator example snippets
use Elie\Validator\Rule\EmailRule;
use Elie\Validator\Rule\MultipleAndRule;
use Elie\Validator\Rule\NumericRule;
use Elie\Validator\Rule\RangeRule;
use Elie\Validator\Rule\StringRule;
use Elie\Validator\Validator;
/**
* A key could have multiple rules
* - name could not be empty (
['age', NumericRule::class, NumericRule::MAX => 60],
['age', RangeRule::class, RangeRule::RANGE => [30, 40, 50]],
// Use composition instead of validating the key twice
['email', MultipleAndRule::class, MultipleAndRule::REQUIRED => true, MultipleAndRule::RULES => [
[StringRule::class, StringRule::MAX => 255],
[EmailRule::class],
]],
];
$validator = new Validator($_POST, $rules, true); // stop processing on error.
$validator->validate(); // bool depends on $_POST content
use Elie\Validator\Rule\AbstractRule;
class MyValueRule extends AbstractRule
{
public const INVALID_MY_VALUE = 'invalidMyValue';
protected $my_value = null;
public function __construct(string $key, $value, array $params = [])
{
parent::__construct($key, $value, $params);
if (isset($params['my_value'])) {
$this->my_value = $params['my_value'];
}
// + in order to add non existent key
$this->messages += [
$this::INVALID_MY_VALUE => '%key%: %value% my message %my_value%'
];
}
public function validate(): int
{
$run = parent::validate();
if ($run !== $this::CHECK) {
return $run;
}
if ($this->value !== $this->my_value) {
return $this->setAndReturnError($this::INVALID_MY_VALUE, [
'%my_value%' => $this->stringify($this->my_value)
]);
}
return $this::VALID;
}
}
use Assert\Assertion;
use Elie\Validator\Rule\EmailRule;
use Elie\Validator\Rule\NumericRule;
use Elie\Validator\Rule\StringRule;
use Elie\Validator\Validator;
use Webmozart\Assert\Assert;
$rules =[
['age', NumericRule::class, NumericRule::MAX => 60],
['name', StringRule::class, StringRule::MIN => 1, StringRule::REQUIRED => true],
['email', EmailRule::class, EmailRule::REQUIRED => true],
];
$validator = new Validator($_POST, $rules);
Assert::true($validator->validate(), $validator->getImplodedErrors());
// OR
Assertion::true($validator->validate(), $validator->getImplodedErrors());
$rules = [
['user', JsonRule::class, JsonRule::REQUIRED => true],
];
$validator = new Validator($_POST, $rules);
Assertion::true($validator->validate()); // this assertion validates that the user is in Json format
$validatedPost = $validator->getValidatedContext();
// But we need to validate user data as well (suppose it should contain name and age):
$rules = [
['name', MatchRule::class, MatchRule::PATTERN => '/^[a-z]{1,20}$/i'],
['age', NumericRule::class, NumericRule::MAX => 80],
];
$validator->setRules($rules);
// Decode user as it is a valid JSON
$user = json_decode($validatedPost['user'], true);
$validator->setContext($user); // new context is now user data
Assertion::true($validator->validate()); // this assertion validates user data
/*
Validate accepts a boolean argument - mergedValidatedContext - which is false by default. If set to true
$validator->getValidatedContext() would return:
array:4 [▼
"email" => "[email protected]"
"user" => "{"name": "John", "age": 25}"
"name" => "John"
"age" => 25
]
*/
$rules = [
// With Json decode, validated value will be decoded into array
['users', JsonRule::class, JsonRule::REQUIRED => true, JsonRule::DECODE => true],
];
$validator = new Validator([
'users' => '[{"name":"John","age":25},{"name":"Brad","age":42}]'
], $rules);
Assertion::true($validator->validate()); // this validate that users is a valid Json format
// But we need to validate all user data as well (suppose it should contain name and age):
$validator->setRules([
['name', MatchRule::class, MatchRule::PATTERN => '/^[a-z]{1,20}$/i'],
['age', NumericRule::class, NumericRule::MAX => 80],
]);
$validatedContext = $validator->getValidatedContext();
$users = $validatedContext['users'];
Assertion::isArray($users);
foreach ($users as $user) {
// each user is a new context
$validator->setContext($user);
// do not merge data !!
Assertion::true($validator->validate()); // we could validate all users and determine which ones are invalid!
}