Datan validointi
Pike sisältää luokat olioiden (ObjectValidator), ja yksittäisten arvojen (ValueValidator) validoimiseen.
Sisällysluettelo
- Olioiden validointi
 - Yksittäisten arvojen validointi
 - Custom one-time -validaattorit
 - Oletusvalidaattorit
 
Olioiden validointi
$object = (object) [
    'foo' => 'value',
    'bar' => (object) ['key' => 'another value'],
    'baz' => [
        (object) ['key' => 'inside array'],
        (object) ['key' => 'inside array'],
    ]
];
$errors = \Pike\Validation::makeObjectValidator()
    ->rule('foo', 'type', 'int')
    ->rule('optional?', 'type', 'int')
    ->rule('bar.key', 'minLength', 1)
    ->rule('baz.*.key', 'in', ['a', 'b'])
    ->validate($object);
if (!$errors)
    ; // Ok, $errors == []
else
    ; // Fail, $errors == ['Virheviesti', 'Toinen virheviesti' ...]
Yksittäisten arvojen validointi
$value = 'value';
$errors = \Pike\Validation::makeValueValidator()
    ->rule('type', 'string')
    ->rule('minLength', 1)
    ->validate($value);
if (!$errors)
    ; // Ok, $errors == []
else
    ; // Fail, $errors == ['Virheviesti', 'Toinen virheviesti' ...]
Custom one-time -validaattorit
Yksittäiseen validaattori-instanssiin voi lisätä omia validaattoreita metodilla addRuleImpl().
$v = Validation::makeValueValidator();
$v2 = Validation::makeValueValidator();
$v->addRuleImpl('myRule', function ($value, $arg1, $arg2) {
    return $value === $arg1 || $value === $arg2;
}, '%s is not %s nor %d');
$errors = $v->rule('myRule', 'foo', 1)
            ->validate('bar'); // value is not foo nor 1
$v2->rule('myRule', ...) // PikeException, No implementation found for `myRule`.
Oletusvalidaattorit
rule(‘type’, ‘string’|’int’|’number’|’array’|’bool’|’float’|’object’ $expectedType)
Tarkastaa onko arvo tyyppiä $expectedType.
$valueValidator->rule('type', 'string')->validate([]);    // Errors
$valueValidator->rule('type', 'string')->validate('str'); // Ok
rule(‘minLength’, int $minLength)
Tarkastaa onko arvo merkkijono tai countable, jonka mb_strlen() tai count() arvo on suurempi, tai yhtä suuri kuin $minLength.
$valueValidator->rule('minLength', 2)->validate('s');   // Errors
$valueValidator->rule('minLength', 2)->validate('st');  // Ok
$valueValidator->rule('minLength', 2)->validate([1]);   // Errors
$valueValidator->rule('minLength', 2)->validate([1,2]); // Ok
rule(‘maxLength’, int $maxLength)
Tarkastaa onko arvo merkkijono tai countable, jonka mb_strlen() tai count() arvo on pienempi, tai yhtä suuri kuin $maxLength.
$valueValidator->rule('maxLength', 2)->validate('str');   // Errors
$valueValidator->rule('maxLength', 2)->validate('st');    // Ok
$valueValidator->rule('maxLength', 2)->validate([1,2,3]); // Errors
$valueValidator->rule('maxLength', 2)->validate([1,2]);   // Ok
rule(‘min’, int $min)
Tarkastaa onko arvo numero, jonka arvo on enemmän, tai yhtä suuri kuin $min.
$valueValidator->rule('min', 5)->validate(1);     // Errors
$valueValidator->rule('min', 5)->validate('1');   // Errors
$valueValidator->rule('min', 5)->validate('foo'); // Errors
$valueValidator->rule('min', 5)->validate([]);    // Errors
$valueValidator->rule('min', 5)->validate(6);     // Ok
$valueValidator->rule('min', 5)->validate('6.0'); // Ok
$valueValidator->rule('min', 5)->validate(5);     // Ok
rule(‘max’, int $max)
Tarkastaa onko arvo numero, jonka arvo on vähemmän, tai yhtä suuri kuin $max.
$valueValidator->rule('max', 5)->validate(6);     // Errors
$valueValidator->rule('max', 5)->validate('6');   // Errors
$valueValidator->rule('max', 5)->validate('foo'); // Errors
$valueValidator->rule('max', 5)->validate([]);    // Errors
$valueValidator->rule('max', 5)->validate(2);     // Ok
$valueValidator->rule('max', 5)->validate('2.0'); // Ok
$valueValidator->rule('max', 5)->validate(5);     // Ok
rule(‘in’, array $listOfValues)
Tarkastaa löytyykö arvo taulukosta $listOfValues.
$valueValidator->rule('in', [1, 2])->validate(6);     // Errors
$valueValidator->rule('in', [1, 2])->validate('foo'); // Errors
$valueValidator->rule('in', [1, 2])->validate('2');   // Errors (väärä tietotyyppi)
$valueValidator->rule('in', [1, 2])->validate(2);     // Ok
rule(‘identifier’)
Tarkastaa onko arvo merkkijono, joka:
- Alkaa kirjaimella a-zA-Z tai _
 - Sisältää ainoastaan a-zA-Z0-9 tai _
 
$valueValidator->rule('identifier')->validate([]);     // Errors (ei string)
$valueValidator->rule('identifier')->validate('Ab#');  // Errors (non-ascii)
$valueValidator->rule('identifier')->validate('Abä');  // Errors (non-ascii)
$valueValidator->rule('identifier')->validate('4foo'); // Errors (alkaa numerolla)
$valueValidator->rule('identifier')->validate('Abc');  // Ok
$valueValidator->rule('identifier')->validate('Ab_c'); // Ok
$valueValidator->rule('identifier')->validate('Ab5');  // Ok
rule(‘regexp’, string $pattern)
Tarkastaa onko arvo merkkijono, joka läpäisee säännöllisen lausekkeen $pattern.
$valueValidator->rule('regexp', '/[a-c]+/')->validate('d'));   // Errors
$valueValidator->rule('regexp', '/[a-c]+/')->validate(''));    // Errors
$valueValidator->rule('regexp', '/[a-c]+/')->validate([]));    // Errors
$valueValidator->rule('regexp', '/[a-c]+/')->validate('a'));   // Ok
$valueValidator->rule('regexp', '/[a-c]+/')->validate('abc')); // Ok