Created
May 8, 2020 02:04
-
-
Save ismail1432/23679cb3724d07b60a76293b3a30cf34 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Simple hydrator | |
final class Hydrator | |
{ | |
public function hydrate($object, array $data = []) | |
{ | |
foreach ($data as $property => $value) { | |
$method = 'set'.ucfirst($property); | |
if (\method_exists($object, $method)) { | |
$object->{$method}($value); | |
} | |
} | |
} | |
} | |
class Root { | |
/** | |
* @var string | |
*/ | |
$firstName; | |
/** | |
* @var string | |
*/ | |
$lastName; //string | |
// other properties | |
/** | |
* @var FooEmbedded | |
*/ | |
$fooEmbedded; | |
/** | |
* @var BarEmbedded | |
*/ | |
$barEmbedded; | |
/** | |
* @var DummyEmbedded | |
*/ | |
$dummyEmbedded; | |
// setters | |
} | |
// index.php | |
$data = [ | |
'firstname' => 'Smaone', | |
'lastName' => 'LesZommes', | |
// nearly 20 properties in the root | |
'dummyEmbedded' => ['property1'=> 'value', 'property2'=> 'value',],//... | |
'barEmbedded' => ['property1'=> 'value', 'property2'=> 'value',]//... | |
'fooEmbedded' => ['property1'=> 'value', 'property2'=> 'value',]//... | |
]; | |
$embeddedRelations = [ | |
'dummyEmbedded'=> FooEmbedded::class, | |
'barEmbedded' => BarEmbedded, | |
'fooEmbedded'=> FooEmbedded::class | |
]; | |
// Replace the emmbedded array by an object | |
foreach ($embeddedRelations as $relationName => $fqcn) { | |
$relationObject = new $fqcn; | |
(new Hydrator)->hydrate($relationObject, $data[$relationName]); | |
$data[$relationName] = $relationObject; | |
} | |
// Hydrate the Root :-) | |
$root = new Root; | |
(new Hydrator)->hydrate($root, $data); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment