Wallogit.com
2017 © Pedro PelĂĄez
Yet another validation class for PHP
Validation is the process that checks for correctness, meaningfulness and security of the input data. SimpleValidator is a library that handles validation process easily., (*2)
Add this line into require in your composer.json:, (*3)
"simple-validator/simple-validator": "1.0.*"
and call, (*4)
php composer.phar update
Download composer.phar and call, (*5)
php composer.phar install
and use autoload.php to include the classes, (*6)
require 'vendor/autoload.php'
<?php
$rules = [
'name' => [
'required',
'alpha',
'max_length(50)'
],
'age' => [
'required',
'integer',
],
'email' => [
'required',
'email'
],
'password' => [
'required',
'equals(:password_verify)'
],
'password_verify' => [
'required'
]
];
$validation_result = SimpleValidator\Validator::validate($_POST, $rules);
if ($validation_result->isSuccess() == true) {
echo "validation ok";
} else {
echo "validation not ok";
var_dump($validation_result->getErrors());
}
Anonymous functions make the custom validations easier to be implemented., (*7)
$rules = [
'id' => [
'required',
'integer',
'post_exists' => function($input) {
$query = mysqli_query("SELECT * FROM post WHERE id = " . $input);
if (mysqli_num_rows($query) == 0)
return false;
return true;
},
'between(5,15)' => function($input, $param1, $param2) {
if (($input > $param1) && ($input < $param2))
return true;
return false;
}
]
];
and you need to add an error text for your rule to the error file (default: errors/en.php)., (*8)
'post_exists' => "Post does not exist"
or add a custom error text for that rule, (*9)
$validation_result->customErrors([
'post_exists' => 'Post does not exist'
]);
// my local variable
$var_to_compare = "1234";
$rules = [
'password' => [
'required',
'integer',
// pass my local variable to anonymous function
'is_match' => function($input) use (&$var_to_compare) {
if ($var_to_compare == $input)
return true;
return false;
}
]
];
You can assume SimpleValidator as a tool or an interface to create a validator for yourself., (*10)
Custom validators can have their own rules, own error files or default language definitions. In addition, you can override default rules in your custom validator., (*11)
class MyValidator extends \SimpleValidator\Validator { // methods have to be static !!! protected static function is_awesome($input) { if ($input == "awesome") return true; return false; } // overriding a default rule (url) protected static function url($input) { return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $input); } // set default language for your validator // if you don't override this method, the default language is "en" protected function getDefaultLang() { return getMyApplicationsDefaultLanguage(); } // defining error files for your validator // in this example your files should live in "{class_path}/errors/{language}/validator.php protected function getErrorFilePath($lang) { return __DIR__ . "/errors/" . $lang . "/validator.php"; } }
Create an error file:, (*12)
return [
'is_awesome' => 'the :attribute is not awesome'
// error text for url is already defined in default error text file you don't have to define it here, but optionally you can
];
And then, call the validate method., (*13)
$rules = [
'website' => [
'is_awesome',
'url'
]
];
$validation_result = MyValidator::validate($_POST, $rules);
A rule can have multiple parameters. An example:, (*14)
$rule = [
'id' => [
'rule1(:input1,:input2,2,5,:input3)' => function($input, $input1, $input2, $value1, $value2, $input3) {
// validation here
}
],
// and so on..
];
Custom rules provides localization for the error messages.
Create a new file under errors folder, example: errors/es.php
and call getErrors() method using:, (*15)
$validation_result->getErrors('es');
You can add custom errors using customErrors method., (*16)
$validation_result->customErrors([
// input_name.rule => error text
'website.required' => 'We need to know your web site',
// rule => error text
'required' => ':attribute field is required',
'name.alpha' => 'Name field must contain alphabetical characters',
'email_addr.email' => 'Email should be valid',
'email_addr.min_length' => 'Hey! Email is shorter than :params(0)',
'min_length' => ':attribute must be longer than :params(0)'
]);
$naming => [
'name' => 'Name',
'url' => 'Web Site',
'password' => 'Password',
'password_verify' => 'Password Verification'
];
$validation_result = SimpleValidator\Validator::validate($_POST, $rules, $naming);
You can explicitly check out the validations using has method that might be useful for Unit Testing purposes., (*17)
// All return boolean
$validation_result->has('email');
$validation_result->has('email','required');
$validation_result->has('password','equals');
| Rule | Parameter | Description | Example |
|---|---|---|---|
| required | No | Returns FALSE if the input is empty | |
| numeric | No | Returns FALSE if the input is not numeric | |
| No | Returns FALSE if the input is not a valid email address | ||
| integer | No | Returns FALSE if the input is not an integer value | |
| float | No | Returns FALSE if the input is not a float value | |
| alpha | No | Returns FALSE if the input contains non-alphabetical characters | |
| alpha_numeric | No | Returns FALSE if the input contains non-alphabetical and numeric characters | |
| ip | No | Returns FALSE if the input is not a valid IP (IPv6 supported) | |
| url | No | Returns FALSE if the input is not a valid URL | |
| max_length | Yes | Returns FALSE if the input is longer than the parameter | max_length(10) |
| min_length | Yes | Returns FALSE if the input is shorter than the parameter | min_length(10) |
| exact_length | Yes | Returns FALSE if the input is not exactly parameter value long | exact_length(10) |
| equals | Yes | Returns FALSE if the input is not same as the parameter | equals(:password_verify) or equals(foo) |