PHP code example of bus-factor / ares
1. Go to this page and download the library: Download bus-factor/ares 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/ */
bus-factor / ares example snippets
use Ares\Ares;
// atomic types
$ares = new Ares(['type' => 'string']);
$valid = $ares->validate('John Doe');
$errors = $ares->getValidationErrors();
// complex/nested types
$ares = new Ares([
'type' => 'map',
'schema' => [
'firstName' => ['type' => 'string', '
$schema = [];
$options = [];
$ares = new Ares($schema, $options);
Validator::OPTIONS_DEFAULTS = [
'allBlankable' => false,
'allNullable' => false,
'allRequired' => true,
'allUnknownAllowed' => false,
]
$schema = [
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
],
];
$ares = new Ares($schema);
$ares->validate(['name' => ''], ['allBlankable' => true]); // -> true
$ares->validate(['name' => ''], ['allBlankable' => false]); // -> false
$schema = [
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
'email' => ['type' => 'string', 'blankable' => true],
],
];
$ares->validate(['name' => 'John Doe', 'email' => ''], ['allBlankable' => false]); // -> true
$schema = [
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
],
];
$ares->validate(['name' => null], ['allNullable' => true]); // -> true
$ares->validate(['name' => null], ['allNullable' => false]); // -> false
$schema = [
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
'email' => ['type' => 'string', 'nullable' => true],
],
];
$ares->validate(['name' => 'John Doe', 'email' => null], ['allNullable' => false]); // -> true
$schema = [
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
],
];
$ares = new Ares($schema);
$ares->validate([], ['allRequired' => true]); // -> false
$ares->validate([], ['allRequired' => false]); // -> true
$schema = [
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
'email' => ['type' => 'string', '
$schema = [
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
],
];
$ares = new Ares($schema);
$ares->validate(['name' => 'John Doe', 'initials' => 'JD'], ['allUnknownAllowed' => false]); // -> false
$ares->validate(['name' => 'John Doe', 'initials' => 'JD'], ['allUnknownAllowed' => true]); // -> true
$ares = new Ares(['type' => 'string', 'allowed' => ['small', 'large']]);
$ares->validate('medium'); // -> false
$ares->validate('small'); // -> true
$ares = new Ares(['type' => 'string', 'blankable' => false]);
$ares->validate(''); // -> false
$ares->validate(' '); // -> false
$ares->validate('John Doe'); // -> true
$ares = new Ares(['type' => 'string', 'blankable' => true]);
$ares->validate(' '); // -> true
$ares = new Ares(['type' => 'string', 'datetime' => true]);
$ares->validate('foo'); // -> false
$ares->validate('2018-03-23'); // -> true
$ares = new Ares(['type' => 'string', 'datetime' => 'd.m.Y H:i']);
$ares->validate('2018-03-23'); // -> false
$ares->validate('23.03.2019 00:20'); // -> true
$ares = new Ares(['type' => 'string', 'directory' => true]);
$ares->validate(''); // -> false
$ares->validate(__FILE__); // -> false
$ares->validate(__DIR__); // -> true
$ares = new Ares(['type' => 'string', 'email' => true]);
$ares->validate('John Doe'); // -> false
$ares->validate('[email protected] '); // -> true
$ares = new Ares(['type' => 'string', 'file' => true]);
$ares->validate(''); // -> false
$ares->validate(__DIR__); // -> false
$ares->validate(__FILE__); // -> true
$ares = new Ares(['type' => 'string', 'forbidden' => ['small', 'medium']]);
$ares->validate('medium'); // -> false
$ares->validate('large'); // -> true
$ares = new Ares(['type' => 'string', 'length' => 3]);
$ares->validate('foobar'); // -> false
$ares->validate('foo'); // -> true
$ares = new Ares([
'type' => 'list',
'length' => 3,
'schema' => [
'type' => 'integer'
],
])
$ares->validate([1, 2]); // -> false
$ares->validate([1, 2, 3]); // -> true
$ares = new Ares(['type' => 'integer', 'max' => 5]);
$ares->validate(6); // -> false
$ares->validate(2); // -> true
$ares = new Ares(['type' => 'string', 'maxlength' => 5]);
$ares->validate('foobar'); // -> false
$ares->validate('foo'); // -> true
$ares = new Ares([
'type' => 'list',
'maxlength' => 3,
'schema' => [
'type' => 'integer'
],
])
$ares->validate([1, 2, 3, 4]); // -> false
$ares->validate([1, 2, 3]); // -> true
$ares = new Ares(['type' => 'integer', 'min' => 5]);
$ares->validate(4); // -> false
$ares->validate(8); // -> true
$ares = new Ares(['type' => 'string', 'minlength' => 5]);
$ares->validate('foo'); // -> false
$ares->validate('foobar'); // -> true
$ares = new Ares([
'type' => 'list',
'minlength' => 3,
'schema' => [
'type' => 'integer'
],
])
$ares->validate([1, 2]); // -> false
$ares->validate([1, 2, 3]); // -> true
$ares = new Ares(['type' => 'string', 'nullable' => false]);
$ares->validate(null); // -> false
$ares->validate('John Doe'); // -> true
$ares = new Ares(['type' => 'string', 'nullable' => true]);
$ares->validate(null); // -> true
$ares = new Ares([
'type' => 'map',
'schema' => [
'key' => [
'type' => 'string',
'regex' => '/^[A-Z]{3}$/',
],
],
]);
$ares->validate(['key' => 'foobar']); // -> false
$ares->validate(['key' => 'FOO']); // -> true
$ares = new Ares([
'type' => 'map',
'schema' => [
'name' => ['type' => 'string', '
$ares = new Ares([
'type' => 'list',
'schema' => [
'type' => 'integer',
],
]);
$ares->validate(['foo', 'bar']); // -> false
$ares->validate([1, 2, 3]); // -> true
$ares = new Ares([
'type' => 'map',
'schema' => [
'email' => ['type' => 'string', 'l' => '[email protected] ']); // -> false
$ares->validate(['email' => '[email protected] ', 'password' => 'j4n3:)']); // -> true
$ares = new Ares([
'type' => 'tuple',
'schema' => [
['type' => 'string', 'email' => true],
['type' => 'integer'],
],
]);
$ares->validate(['[email protected] ']); // -> false
$ares->validate([1 => '[email protected] ', 2 => 23]); // -> false
$ares->validate(['[email protected] ', 23]); // -> true
$ares = new Ares(['type' => 'float']);
$ares->validate(5); // -> false
$ares->validate('John Doe'); // -> false
$ares = new Ares([
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
],
'unknownAllowed' => false,
]);
$ares->validate(['name' => 'John Doe', 'email' => '[email protected] ']); // -> false
$ares->validate(['name' => 'John Doe']); // -> true
$ares = new Ares(['type' => 'string', 'url' => true]);
$ares->validate('example'); // -> false
$ares->validate('https://example.com'); // -> true
$ares = new Ares(['type' => 'string', 'uuid' => true]);
$ares->validate('example'); // -> false
$ares->validate('609de7b6-0ef5-11ea-8d71-362b9e155667'); // -> true
use Ares\Ares;
use Ares\Schema\TypeRegistry;
TypeRegistry::register('GermanDateString', [
'type' => 'string',
['datetime' => 'd.m.Y', 'message' => 'Invalid date format, try something like "24.02.2019"'],
]);
TypeRegistry::register('ListOfHobbies', [
'type' => 'list',
'schema' => [
'type' => 'string',
'allowed' => ['Reading', 'Biking'],
],
]);
TypeRegistry::register('Student', [
'type' => 'map',
'schema' => [
'birthDate' => ['type' => 'GermanDateString'],
'hobbies' => ['type' => 'ListOfHobbies', 'minlength' => 1],
],
]);
$schema = ['type' => 'Student'];
$ares = new Ares($schema);
$ares->validate(['birthDate' => '1998-06-14', 'hobbies' => []]); // false
$ares->validate(['birthDate' => '14.06.1998', 'hobbies' => ['Reading']]); // true
// validation rule without custom message (default)
$ares = new Ares([
'type' => 'integer',
]);
// validation rule with custom message
$ares = new Ares([
['type' => 'integer', 'message' => 'Pleaser provide an integer value']
]);
use Ares\Ares;
use Ares\Validation\Error\ErrorMessageRendererInterface;
class MyErrorMessageRenderer implements ErrorMessageRendererInterface
{
// ...
}
// ...
$ares = new Ares($schema);
$ares->getValidator()->setErrorMessageRenderer(new MyErrorMessageRenderer());
$valid = $ares->validate($data);
use Ares\Ares;
use Ares\Schema\Type;
use Ares\Validation\Context;
use Ares\Validation\RuleRegistry;
use Ares\Validation\Rule\AbstractRule;
class ZipCodeRule extends AbstractRule
{
public const ID = 'zipcode';
public const ERROR_MESSAGE = 'Invalid ZIP code';
/**
* Returns all supported value types.
*
* @return array
*/
public function getSupportedTypes(): array
{
return [
Type::STRING,
];
}
/**
* Perform the value validation.
*
* @param mixed $args Validation rule arguments.
* @param mixed $data Data being validated.
* @param Context $context Validation context.
* @return bool
*/
public function performValidation($args, $data, Context $context): bool
{
// implement validation ...
// add error if the validation fails
$context->addError(self::ID, self::ERROR_MESSAGE);
// TRUE - skip all following validation rules for the current field
// FALSE - run all following validation rules for the current field
return false;
}
}
RuleRegistry::register(ZipCodeRule::ID, new ZipCodeRule());
$schema = [
'type' => 'string',
'zipcode' => true,
];
$ares = new Ares($schema);
$schema = [
'type' => 'map',
'schema' => [
'name' => ['type' => 'string'],
'age' => ['type' => 'integer'],
'active' => ['type' => 'boolean'],
],
];
$ares = new Ares($schema);
$data = [
'name' => ' John Doe ',
'age' => '23',
'active' => '1',
'hobby' => 'Reading',
];
$sanitizedData = $ares->sanitize($data);
// Result:
// [
// 'name' => 'John Doe',
// 'age' => 23,
// 'active' => true,
// ]
Ares\Validation\Error\ErrorCollection
Ares\Validation\Error\Error
Ares\Validation\Error\Error
Ares\Validation\Error\ErrorCollection
file