Simply add a dependency on matthiasmullie/types
to your composer.json file if you use Composer to manage the dependencies of your project:
composer require matthiasmullie/types
use MatthiasMullie\Types;
$type = new Types\Json(
new Types\Map([
'user_id' => new Types\Sha1(
description: 'Unique user id',
),
'email' => new Types\Email(
description: 'Email address of the user',
),
'gender' => new Types\Enum(
['m', 'f'],
description: 'Biological sex',
),
'birthdate' => new Types\Optional(
new Types\Integer(),
description: 'Birth date, UNIX timestamp',
),
]),
);
// this will succeed because the input is valid;
// `birthdate`, given as a string, will be cast to an integer
$safeInput = $type([
'user_id' => 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd4',
'email' => 'jane.doe@example',
'gender' => 'f',
'birthdate' => '1715950172',
]);
// this will throw an exception because a required field (`gender`)
// is missing; note: `$type->test(...)` can also be used to simply
// check validity instead
$safeInput = $type([
'user_id' => 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd4',
'email' => 'jane.doe@example',
'birthdate' => '1715950172',
]);
// this will throw an exception because the input for `email` is not
// a valid email address
$safeInput = $type([
'user_id' => 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd4',
'email' => 'not an email address',
'gender' => 'f',
'birthdate' => '1715950172',
]);
types is MIT licensed.