Link Search Menu Expand Document

Datan validointi

Pike sisältää luokat olioiden (ObjectValidator), ja yksittäisten arvojen (ValueValidator) validoimiseen.

Sisällysluettelo

  1. Olioiden validointi
  2. Yksittäisten arvojen validointi
  3. Custom one-time -validaattorit
  4. Oletusvalidaattorit
    1. rule(‘type’, ‘string’|’int’|’number’|’array’|’bool’|’float’|’object’ $expectedType)
    2. rule(‘minLength’, int $minLength)
    3. rule(‘maxLength’, int $maxLength)
    4. rule(‘min’, int $min)
    5. rule(‘max’, int $max)
    6. rule(‘in’, array $listOfValues)
    7. rule(‘identifier’)
    8. rule(‘regexp’, string $pattern)

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

Copyright © 2019-2021 ut4