fatcode / hydration
Hydration/Extraction library for PHP7
Requires
- php: >=7.2.0
- ext-bcmath: *
- ext-json: *
- ext-mbstring: *
- fatcode/enum: >=1.0.0
- psr/simple-cache: >=1.0.1
- symfony/cache: >=4.2
Requires (Dev)
- fzaninotto/faker: >=1.8
- mockery/mockery: >=1.2
- phpunit/phpunit: >=8.0
- squizlabs/php_codesniffer: >=3.0
- vimeo/psalm: >=3.2
This package is auto-updated.
Last update: 2024-10-19 08:38:42 UTC
README
Installation
composer require fatcode/hydration
Hydration
Hydration is a process of populating object from a set of data. Storage library provides mechanisms and interfaces for both hydrating and extracting data sets.
Schemas
Schema is an object describing how dataset should be hydrated. Schemas should be registered in \FatCode\Hydration\ObjectHydrator
, so
your data can be easily hydrated/extracted.
<?php use FatCode\Hydration\Schema; use FatCode\Hydration\Type; class MyUser { private $id; private $name; private $age; private $interests = []; public function __construct(int $id, string $name, int $age) { $this->id = $id; $this->name = $name; $this->age = $age; } } class MyUserSchema extends Schema { protected $id; protected $name; protected $age; protected $interests; public function __construct() { $this->id = Type::id(); $this->name = Type::string(); $this->age = Type::integer(); $this->interests = Type::array(); } // Target class has to be provided so schema knows to which class it is corresponding. public function getTargetClass() : string { return MyUser::class; } }
Note: Please make sure that your schema properties are either protected or public, so they can be accessed from the parent class. Private properties will not be recognized and this can result in
null
values or errors.
Above we have defined domain class MyUser
and corresponding schema class MyUserSchema
.
Having this setup we can start hydration/extraction process.
Hydration with ObjectHydrator
\FatCode\Hydration\ObjectHydrator
is at the same time registry for all your schema classes and general purpose
hydrator/extractor functionality provider. This may sound like a lot responsibility is put into the class but keep
in mind that hydration/extraction process must be described by schema before it can happen and ObjectHydrator
provides utilities to simplify your workflow with extraction/hydration and schema loading.
In order to hydrate/extract object, a schema must be recognized by ObjectHydrator
. There are two ways of doing it:
- passing schema to
\FatCode\Hydration\ObjectHydrator::addSchema
method - implementing and passing instance of
\FatCode\Hydration\SchemaLoader
to\FatCode\Hydration\ObjectHydrator::addSchemaLoader
method
For now on we will focus on the first one.
Registering schema in the ObjectHydrator
<?php use FatCode\Hydration\ObjectHydrator; $objectHydrator = new ObjectHydrator(); $objectHydrator->addSchema(new MyUserSchema());
The above code registers schema presented in the previous chapter.
From this point on any instance of MyUser
class can be hydrated or extracted with ObjectHydrator
.
Hydrating objects
<?php use FatCode\Hydration\ObjectHydrator; $objectHydrator = new ObjectHydrator(); $objectHydrator->addSchema(new MyUserSchema()); // Hydration $bob = $objectHydrator->hydrate( [ 'id' => 1, 'name' => 'Bob', 'age' => 30, 'interests' => ['Flowers', 'Judo', 'M1lf$'] ], MyUser::class );
Extracting objects
<?php use FatCode\Hydration\ObjectHydrator; $objectHydrator = new ObjectHydrator(); $objectHydrator->addSchema(new MyUserSchema()); $bob = new MyUser(1, 'Bob', 30); $dataset = $objectHydrator->extract($bob); // ['id' => 1, 'name' => 'Bob', 'age' => 30, 'interests' => []]