Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Hydrator;
6
 
7
use Laminas\Hydrator\AbstractHydrator;
8
use ReflectionClass;
9
use ReflectionProperty;
10
 
11
use function array_fill_keys;
12
use function array_map;
13
use function get_class;
14
use function get_object_vars;
15
 
16
class ObjectPropertyHydrator extends AbstractHydrator
17
{
18
    public function extract(object $object) : array
19
    {
20
        $data   = get_object_vars($object);
21
        $filter = $this->getFilter();
22
 
23
        foreach ($data as $name => $value) {
24
            // Filter keys, removing any we don't want
25
            if (! $filter->filter($name)) {
26
                unset($data[$name]);
27
                continue;
28
            }
29
 
30
            // Replace name if extracted differ
31
            $extracted = $this->extractName($name, $object);
32
 
33
            if ($extracted !== $name) {
34
                unset($data[$name]);
35
                $name = $extracted;
36
            }
37
 
38
            if ($name == 'added_on' || $name == 'updated_on') {
39
                continue;
40
            }
41
 
42
 
43
 
44
            $data[$name] = $this->extractValue($name, $value, $object);
45
        }
46
 
47
 
48
        return $data;
49
    }
50
 
51
    public function hydrate(array $data, object $object)
52
    {
53
 
54
 
55
        $properties = null;
56
        if (null === $properties) {
57
            $reflection = new ReflectionClass($object);
58
            $properties = $reflection->getProperties(ReflectionProperty::IS_PUBLIC);
59
 
60
            $properties =
61
                array_map(
62
                    function (ReflectionProperty $property) {
63
                        return $property->getName();
64
                    },
65
                    $properties
66
 
67
                );
68
        }
69
 
70
 
71
        foreach ($data as $name => $value)
72
        {
73
            $property = $this->hydrateName($name, $data);
74
            if(in_array($property, $properties)) {
75
                $object->$property = $this->hydrateValue($property, $value, $data);
76
            }
77
        }
78
 
79
        return $object;
80
    }
81
}