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