1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Koine\Repository; |
4
|
|
|
|
5
|
|
|
use Koine\Repository\Exception\RecordNotFoundException; |
6
|
|
|
use Koine\Repository\Storage\StorageInterface; |
7
|
|
|
use Zend\Hydrator\HydratorInterface; |
8
|
|
|
|
9
|
|
|
abstract class RepositoryAbstract implements RepositoryInterface |
10
|
|
|
{ |
11
|
|
|
/** |
12
|
|
|
* @var HydratorInterface |
13
|
|
|
*/ |
14
|
|
|
private $hydrator; |
15
|
|
|
|
16
|
|
|
/** |
17
|
|
|
* @var object |
18
|
|
|
*/ |
19
|
|
|
private $entityPrototype; |
20
|
|
|
|
21
|
|
|
/** |
22
|
|
|
* @var StorageInterface |
23
|
|
|
*/ |
24
|
|
|
private $storage; |
25
|
|
|
|
26
|
|
|
/** |
27
|
|
|
* @param StorageInterface $storage |
28
|
|
|
*/ |
29
|
|
|
public function __construct(StorageInterface $storage) |
30
|
|
|
{ |
31
|
|
|
$this->storage = $storage; |
32
|
|
|
} |
33
|
|
|
|
34
|
|
|
/** |
35
|
|
|
* @return MySql |
36
|
|
|
*/ |
37
|
|
|
protected function getStorage() |
38
|
|
|
{ |
39
|
|
|
return $this->storage; |
40
|
|
|
} |
41
|
|
|
|
42
|
|
|
/** |
43
|
|
|
* @param array $params |
44
|
|
|
* |
45
|
|
|
* @return object |
46
|
|
|
* |
47
|
|
|
* @throws RecordNotFoundException |
48
|
|
|
*/ |
49
|
|
|
public function findOneBy(array $params) |
50
|
|
|
{ |
51
|
|
|
$rawData = $this->getStorage()->findOneBy($params); |
52
|
|
|
|
53
|
|
|
return $this->createEntity($rawData); |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
/** |
57
|
|
|
* @param array $rawData |
58
|
|
|
* |
59
|
|
|
* @return object |
60
|
|
|
*/ |
61
|
|
|
private function createEntity(array $rawData = array()) |
62
|
|
|
{ |
63
|
|
|
$entity = clone $this->getEntityPrototype(); |
64
|
|
|
|
65
|
|
|
if ($rawData) { |
|
|
|
|
66
|
|
|
$this->getHydrator()->hydrate($rawData, $entity); |
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
return $entity; |
70
|
|
|
} |
71
|
|
|
|
72
|
|
|
/** |
73
|
|
|
* @param array $params |
74
|
|
|
* |
75
|
|
|
* @return array |
76
|
|
|
*/ |
77
|
|
|
public function findAllBy(array $params = array()) |
78
|
|
|
{ |
79
|
|
|
$rawCollection = $this->getStorage()->findAllBy($params); |
80
|
|
|
$collection = array(); |
81
|
|
|
|
82
|
|
|
foreach ($rawCollection as $rawData) { |
83
|
|
|
$collection[] = $this->createEntity($rawData); |
84
|
|
|
} |
85
|
|
|
|
86
|
|
|
return $collection; |
87
|
|
|
} |
88
|
|
|
|
89
|
|
|
/** |
90
|
|
|
* @param HydratorInterface $hydrator |
91
|
|
|
* |
92
|
|
|
* @return self |
93
|
|
|
*/ |
94
|
|
|
public function setHydrator(HydratorInterface $hydrator) |
95
|
|
|
{ |
96
|
|
|
$this->hydrator = $hydrator; |
97
|
|
|
|
98
|
|
|
return $this; |
99
|
|
|
} |
100
|
|
|
|
101
|
|
|
/** |
102
|
|
|
* @return HydratorInterface |
103
|
|
|
*/ |
104
|
|
|
public function getHydrator() |
105
|
|
|
{ |
106
|
|
|
if ($this->hydrator === null) { |
107
|
|
|
throw new \DomainException('Hydrator was not set'); |
108
|
|
|
} |
109
|
|
|
|
110
|
|
|
return $this->hydrator; |
111
|
|
|
} |
112
|
|
|
|
113
|
|
|
/** |
114
|
|
|
* @param object $entityPrototype |
115
|
|
|
* |
116
|
|
|
* @return self |
117
|
|
|
*/ |
118
|
|
|
public function setEntityPrototype($entityPrototype) |
119
|
|
|
{ |
120
|
|
|
$this->entityPrototype = $entityPrototype; |
121
|
|
|
|
122
|
|
|
return $this; |
123
|
|
|
} |
124
|
|
|
|
125
|
|
|
/** |
126
|
|
|
* @return object |
127
|
|
|
*/ |
128
|
|
|
public function getEntityPrototype() |
129
|
|
|
{ |
130
|
|
|
if ($this->entityPrototype === null) { |
131
|
|
|
throw new \DomainException('Entity Prototype was not set'); |
132
|
|
|
} |
133
|
|
|
|
134
|
|
|
return $this->entityPrototype; |
135
|
|
|
} |
136
|
|
|
} |
137
|
|
|
|
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)
or! empty(...)
instead.