xphoenyx/valify

This package is abandoned and no longer maintained. No replacement package was suggested.

A little framework for user input validation

v1.11 2015-08-07 09:23 UTC

This package is not auto-updated.

Last update: 2021-07-09 23:22:05 UTC


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
  • email
  • 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.