djordje/li3_validators

Collection of lithium validators

Installs: 67

Dependents: 2

Suggesters: 0

Security: 0

Stars: 2

Watchers: 1

Forks: 0

Open Issues: 0

Type:lithium-library

dev-master 2013-07-12 16:30 UTC

This package is not auto-updated.

Last update: 2024-11-09 14:45:14 UTC


README

Table of content:

Installation adn usage:

Git clone:

	cd path/to/libraries
	git clone git://github.com/djordje/li3_validators.git

Or trough composer:

Add this to your composer.json file:

	{
		"minimum-stability": "dev",
		"require": {
			"djordje/li3_validators": "dev-master"
		}
	}

After either of these two steps open app/config/bootstrap/libraries.php with your editor and add this to bootom of the file:

Libraries::add('li3_validators')

Now you can use this validators in your model just as any other bundled or added validator!

Custom validators:

Unique validator

Name: 'unique'

Ensure that entered value is unique in database. If 'events' is update do query with provided options

Options:

'key' string - Database table key that will be used as condition key if 'events' is update, by default 'id'

'keyValue' string - Setup key value if you don't want to fetch it from 'values' field, by default null which means that field fetch value of $options['values']['id'] if you don't change 'key'

Confirm validator

Name: 'confirm'

Confirm that this field is equal to field against we compare.

Options:

'strategy' string (direct|password) - Default is 'direct' which means we compare value against desired field directly 'string' === 'string'. If we set this to 'password' validator use Password::check() for comparing value against desired field

'against' string - By default this is null which means we will compare this field against same named field with confirm_ prefix, eg. email against confirm_email, or we can set field name against we want to compare

Dependencies validator

Name: 'dependencies'

Check field dependencies. Evaluate conditions to see if all dependencies are correct

Options:

'conditions' array - Eval comparation builder compatible conditions array

Example:

	$options = array('conditions' => array(
		array('gender', '===', 'M')
	));

This field will require 'gender' field equal to 'M'

Compare with old db value validator

Name: 'compareWithOldDbValue'

Compare value with existing value in database

Options:

'strategy' string (direct|password) - Default is 'direct' which means we compare value against desired field directly 'string' === 'string'. If we set this to 'password' validator use Password::check() for comparing value against desired field

'findBy' string - Field name that will be used as condition for finding original value, default is 'id'

'field' string - Original field name

Example:

	$options = array(
		'strategy' => 'password',
		'field' => 'password'
	);

This validator will assume that value of this field, for example 'old_password' is equal to the value of 'password' field where 'id' is equal to current 'id'

Conditional in range validator

Name: 'condtionalInRange'

This validator is very similar to Lithium's 'inRange' validator, but require conditions to be true as well

Options:

'upper' integer

'lower' integer

'conditions' array - Eval comparation builder compatible conditions array

Example:

	$options = array(
		'lower' => 169, 'upper' => '206',
		'conditions' => array(
        	array('gender', '===', 'M')
        )
	);

This assume that value of this field (for example 'height') is greater than 169 and smaller than 206 just if 'gender' field exists and is equal to 'M'

Overridden validators:

Email validator

Name: 'email'

Options:

'pattern' mixed (false|regex) - If false use php filter_var() function (default in Lithium) to check value, or regex to match against.

'mx' boolean that enable validator to check if MX DNS record exists

You can achieve lithium's default behavior with options 'mx' => false, 'pattern' => false.

By default this filter check against custom regex that doesn't match all RFC 5322 valid emails, but will match against most correct emails, and doesn't check domain against MX DNS record. 'mx' => false, 'pattern' => '/^[a-z0-9][a-z0-9_.-]*@[a-z0-9.-]{3,}\.[a-z]{2,4}$/i'

Eval comparation builder:

li3_validators\extensions\util\EvalComparation::build(array $options)

Options:

conditions array - This array will be converted to eval string

values array - Associative array of values that will be used in generated condition

Best way to understand this utility method is example:

	$options = array(
		'conditions' => array(array('name', '===', 'diff_test_name')),
		'values' => array('name' => 'test_name')
	);

	$eval_one = EvalComparation::build($options); // 'return (('test_name' === 'diff_test_name'));'


	$options = array(
		'conditions' => array(
			array('name', '===', 'diff_test_name'), '||', array('name', '===', 'test_name')
		),
		'values' => array('name' => 'test_name')
	);

	$eval_two = EvalComparation::build($options); // 'return (('test_name' === 'diff_test_name') || ('test_name' === 'test_name'));'

eval($eval_one) will evaluate false

eval($eval_two) will evaluate true

You can build nested conditions as well:

	$options = array(
		'conditions' => array(
			array('name', '===', 'diff_test_name'), '&&',
			array(
				array('other_field', '===', null), '||', array('other_field', '===', 'correct')
			)
		),
		'values' => array('name' => 'test_name', 'other_field' => 'other_field_val')
	);

	$eval_tree = EvalComparation::build($options);
	// 'return (('test_name' === 'diff_test_name') && (('other_field_val' === null) || ('other_field_val' === 'correct')));'

Project status

[Build Status] (https://travis-ci.org/djordje/li3_validators) [project status] (http://stillmaintained.com/djordje/li3_validators)