Skip to content

Commit d3e4b69

Browse files
committed
Implementação da flexibilização dos filtros para hydrators e extractors.
1 parent 242ef3e commit d3e4b69

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

src/Mapping/Extraction/Extractor.php

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Zend\EntityMapper\Config\Container\Container;
66
use Zend\EntityMapper\Config\Entity;
77
use Zend\EntityMapper\Config\Field;
8+
use Zend\Filter\FilterInterface;
89

910
/**
1011
* Extractor
@@ -42,11 +43,12 @@ private function getFields($object): array
4243

4344
/**
4445
* @param $object
46+
* @param bool $ignoreFilter
4547
* @return array
4648
* @throws \Zend\Cache\Exception\ExceptionInterface
4749
* @throws \Zend\EntityMapper\Config\Container\Exceptions\ItemNotFoundException
4850
*/
49-
public function extract($object): array
51+
public function extract($object, $ignoreFilter = false): array
5052
{
5153
$fields = $this->getFields($object);
5254
$reflection = new \ReflectionObject($object);
@@ -56,7 +58,20 @@ public function extract($object): array
5658
if(!$field->isForeignKey() && !$field->isCollection()){
5759
$property = $reflection->getProperty($field->getProperty());
5860
$property->setAccessible(true);
59-
$array[$field->getAlias()] = $property->getValue($object);
61+
62+
$value = $property->getValue($object);
63+
64+
if($field->hasOutputFilter() && $ignoreFilter === false) {
65+
/** @var FilterInterface $outputFilter */
66+
$outputFilter = $field->getOutputFilter();
67+
if(is_string($outputFilter) && class_exists($outputFilter)) {
68+
$outputFilter = new $outputFilter;
69+
}
70+
71+
$value = $outputFilter->filter($value);
72+
}
73+
74+
$array[$field->getAlias()] = $value;
6075
}
6176
}
6277

src/Mapping/Hydration/Hydrator.php

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,13 @@ public function hydrate(array $data, $object)
8080

8181
// Filter the data
8282
if($propertyConfig->hasInputFilter()) {
83-
$inputFilterClass = $propertyConfig->getInputFilter();
8483

85-
/** @var FilterInterface $inputFilter */
86-
$inputFilter = new $inputFilterClass;
84+
/** @var FilterInterface $outputFilter */
85+
$inputFilter = $propertyConfig->getInputFilter();
86+
if(is_string($inputFilter) && class_exists($inputFilter)) {
87+
$inputFilter = new $inputFilter;
88+
}
89+
8790
$filtered = $inputFilter->filter($data[$propertyAlias]);
8891
$property->setValue($object, $filtered);
8992
continue;

0 commit comments

Comments
 (0)