Доработал логику обработки виртуальных полей

This commit is contained in:
Sipachev Igor 2021-08-16 18:54:31 +07:00
parent ba54621a7f
commit f27e92544f

View File

@ -18,6 +18,8 @@ class Data2DtoConverter
{ {
$tags = empty($tags) ? ['default'] : $tags; $tags = empty($tags) ? ['default'] : $tags;
$reflectionObject = new \ReflectionObject($object); $reflectionObject = new \ReflectionObject($object);
// Трнансформируем на уровне класса
$this->processClassTransformers($reflectionObject, $data, $tags); $this->processClassTransformers($reflectionObject, $data, $tags);
if (is_object($data)) { if (is_object($data)) {
return $data; return $data;
@ -33,9 +35,15 @@ class Data2DtoConverter
// Для виртуальных полей добавляем пустой масиив, чтобы заполнить поля дто // Для виртуальных полей добавляем пустой масиив, чтобы заполнить поля дто
$propertyExtractor = new PropertyExtractor($property->class, $property->getName()); $propertyExtractor = new PropertyExtractor($property->class, $property->getName());
if ($propertyExtractor->fetch(VirtualProperty::class)) { if ($propertyExtractor->fetch(VirtualProperty::class)) {
if (!array_key_exists($property->getName(), $data)) { if ($property->isInitialized($object)) {
$data[$property->getName()] = []; $propertyValue = $property->getValue($object);
$value = $this->convert($data, $propertyValue, $tags);
} else {
$value = $this->convert($data, new $propertyType, $tags);
} }
// присваиваем получившееся значение
$property->setValue($object, $value);
continue;
} }
if ($dataPath = $this->grabDataPath($property, $data, $tags)) { if ($dataPath = $this->grabDataPath($property, $data, $tags)) {