xphoenyx / valify
A little framework for user input validation
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.0.*
README
NB! This project is archived thus not maintained anymore
Valify
A little framework for user input validation. It is still in development, so keep an eye on commits. Inspired by Yii2 input validation implementation.
Requirements
You need PHP 5.4 to run this code.
Installation
After downloading source, add next code to file, where you data is going to be validated:
require 'valify/Validator.php'; $validator = new Validator();
Framework uses namespaces, so add next line to the top of file, where validator is called:
use valify\Validator;
There is also a more straightforward way to install this framework through the compser. In your project root, issue next command in terminal:
php composer.phar require xphoenyx/valify 1.*
Now you are ready to validate your data.
Hint for a MVC pattern users
You can implement your own methods in base model class. Please investigate an example below:
use valify\Validator; class Model { /* ... */ protected $validator; // Your rules public $rules = []; // Here is stored $_POST, for example public $data = []; function __construct() { /* ... */ $this->validator = new Validator(); /* ... */ } /* * Your other methods */ public function validate() { return $this->validator ->setRules($this->rules) ->loadData($this->data) ->validate(); } public function getErrors() { return $this->validator->getErrors(); } }
Usage
Usage is similar to Yii2 input validation.
Define rules
$rules = [ [['username', 'password'], 'string', 'max'=>10], ['email', 'email', 'message'=>'Please provide a valid email'], ['remember_me', 'boolean'] /* ... */ ];
Each validator accepts message
parameter, which should contain an error message as string.
You can access attribute name and its value in message
by using so-called 'patterns':
['email', 'email', 'message'=>'{value} for attribute "{attribute}" is not a valid email'],
NB! If the value is not representable as a string, value type will be shown instead of value itself
You can also implement your own validators by extending valify\validator\AbstractValidator
class.
In this case, if you are not using composer autoloader, you should also import (require) AbstractValidator.
To use own validator in rules, just define validator namespace as a validator name:
$rules = [ /* ... */ ['email', '\\examples\\ExampleValidator', 'ownProperty'=>'abc' /* ... */] /* ... */ ];
Make sure your validator is loaded before defining a namespace in rules.
Refer to the valify\validators\ExampleValidator
for detailed implementation info.
Define data to be validated
Input data is expected in next format:
$data = [ 'username'=>'username', 'password'=>'123qwe', 'email'=>'address@gmail.com', 'remember_me'=>'1', /* ... */ ];
Set rules and data
$validator = new Validator(); $validator = $validator->setRules($rules)->loadData($data)
You can call setrules()
and loadData()
multiple times:
$validator = new Validator(); $validator = $validator ->setRules([...]) ->loadData([...]) ->setRules([...]) ->setRules([...]) ->loadData([...]) ->loadData([...]);
Execute validation
$isValid = $validator->validate();
You have an ability to perform a single value validation, without calling setRules()
and loadData()
:
$password = $_POST['password']; $isValid = Validator::validateFor('string', $password, ['min'=>6, 'max'=>20]);
For multiple value validation, pass an array of desired values as a second argument:
$values = [ $_POST['username'], $_POST['first_name'], $_POST['password'], ]; $isValid = Validator::validateFor('string', $values, ['min'=>3, 'max'=>30]);
validateFor()
will return an object with two properties:
isValid
- contains boolean value;lastError
- contains last validation error message;errors
- contains whole error message stack for validating attribute;
Fetch error messages
if($validator->hasErrors()) { $errorMsgs = $validator->getErrors(); }
You can also get an error message of a single attribute:
$errorMsgForUserAttr = $validator->getError('username');
As each attribute can have a few error messages, getError()
will give you
the last message of the corresponding attribute error stack (array).
List of built-in validators:
- boolean
- file
- required
- string
- url
- phone
- in
- number
- compare
- unique
For detailed parameter description of each validator, see class methods in valify/validators.
Testing
In order to properly run unit tests, you need to specify path to the composer autoloader file.
Then you just issue the phpunit
command in terminal under valify
(component root) directory.
Examples
Check index.php in examples
directory to view framework in action.
All bug and issue reports are welcome as well as improvement proposals. Enjoy.