AutorÃa | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace LeadersLinked\Hydrator;use Laminas\Hydrator\AbstractHydrator;use ReflectionClass;use ReflectionProperty;use function array_fill_keys;use function array_map;use function get_class;use function get_object_vars;class ObjectPropertyHydrator extends AbstractHydrator{public function extract(object $object) : array{$data = get_object_vars($object);$filter = $this->getFilter();foreach ($data as $name => $value) {// Filter keys, removing any we don't wantif (! $filter->filter($name)) {unset($data[$name]);continue;}// Replace name if extracted differ$extracted = $this->extractName($name, $object);if ($extracted !== $name) {unset($data[$name]);$name = $extracted;}if ($name == 'added_on' || $name == 'updated_on') {continue;}$data[$name] = $this->extractValue($name, $value, $object);}return $data;}public function hydrate(array $data, object $object){$properties = null;if (null === $properties) {$reflection = new ReflectionClass($object);$properties = $reflection->getProperties(ReflectionProperty::IS_PUBLIC);$properties =array_map(function (ReflectionProperty $property) {return $property->getName();},$properties);}foreach ($data as $name => $value){$property = $this->hydrateName($name, $data);if(in_array($property, $properties)) {$object->$property = $this->hydrateValue($property, $value, $data);}}return $object;}}