Product Promotion
0x5a.live
for different kinds of informations and explorations.
GitHub - CuyZ/Valinor: PHP library that helps to map any input into a strongly-typed value object structure.
PHP library that helps to map any input into a strongly-typed value object structure. - CuyZ/Valinor
Visit SiteGitHub - CuyZ/Valinor: PHP library that helps to map any input into a strongly-typed value object structure.
PHP library that helps to map any input into a strongly-typed value object structure. - CuyZ/Valinor
Powered by 0x5a.live 💗
Valinor takes care of the construction and validation of raw inputs (JSON, plain arrays, etc.) into objects, ensuring a perfectly valid state. It allows the objects to be used without having to worry about their integrity during the whole application lifecycle.
The validation system will detect any incorrect value and help the developers by providing precise and human-readable error messages.
The mapper can handle native PHP types as well as other advanced types supported by PHPStan and Psalm like shaped arrays, generics, integer ranges and more.
The library also provides a normalization mechanism that can help transform any input into a data format (JSON, CSV, …), while preserving the original structure.
Installation
composer require cuyz/valinor
📔 Read more on the online documentation
Example
final class Country
{
public function __construct(
/** @var non-empty-string */
public readonly string $name,
/** @var list<City> */
public readonly array $cities,
) {}
}
final class City
{
public function __construct(
/** @var non-empty-string */
public readonly string $name,
public readonly DateTimeZone $timeZone,
) {}
}
$json = <<<JSON
{
"name": "France",
"cities": [
{"name": "Paris", "timeZone": "Europe/Paris"},
{"name": "Lyon", "timeZone": "Europe/Paris"}
]
}
JSON;
try {
$country = (new \CuyZ\Valinor\MapperBuilder())
->mapper()
->map(Country::class, \CuyZ\Valinor\Mapper\Source\Source::json($json));
echo $country->name; // France
echo $country->cities[0]->name; // Paris
} catch (\CuyZ\Valinor\Mapper\MappingError $error) {
// Handle the error…
}
Documentation
The full documentation is available on valinor.cuyz.io.
Credits & thank you
The development of this library is mainly motivated by the kind words and the help of many people. I am grateful to everyone, especially to the contributors of this repository who directly help to push the project forward.
I also want to thank Blackfire for providing a license of their awesome tool, leading to notable performance gains when using this library.
PHP Resources
are all listed below.
Made with ❤️
to provide different kinds of informations and resources.