From a45c2907dfffa4ed760a286ee006ff7f1b0fad4f Mon Sep 17 00:00:00 2001 From: Rinsvent Date: Tue, 17 Aug 2021 22:56:22 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB=D0=B8?= =?UTF-8?q?=D1=88=D0=BD=D1=8E=D1=8E=20=D1=80=D0=B5=D0=BA=D1=83=D1=80=D1=81?= =?UTF-8?q?=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Data2DtoConverter.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Data2DtoConverter.php b/src/Data2DtoConverter.php index 33ae465..05a43f5 100644 --- a/src/Data2DtoConverter.php +++ b/src/Data2DtoConverter.php @@ -28,6 +28,8 @@ class Data2DtoConverter $properties = $reflectionObject->getProperties(); /** @var \ReflectionProperty $property */ foreach ($properties as $property) { + // todo добавить атрибут на пропуск обработки и еще атрибут на допустимые поля + /** @var \ReflectionNamedType $reflectionPropertyType */ $reflectionPropertyType = $property->getType(); $propertyType = $reflectionPropertyType->getName(); @@ -53,7 +55,9 @@ class Data2DtoConverter continue; } - $this->processClass($object, $property, $preparedPropertyType, $value, $tags); + if ($this->processClass($object, $property, $preparedPropertyType, $value, $tags)) { + continue; + } if ($this->processNull($reflectionPropertyType, $value)) { continue; @@ -118,15 +122,20 @@ class Data2DtoConverter /** * Если это class, то рекурсивно заполняем дальше */ - protected function processClass(object $object, ReflectionProperty $property, string $preparedPropertyType, &$value, array $tags) + protected function processClass(object $object, ReflectionProperty $property, string $preparedPropertyType, &$value, array $tags): bool { if (class_exists($preparedPropertyType)) { - if ($property->isInitialized($object) && $propertyValue = $property->getValue($object)) { + $propertyValue = $property->getValue($object); + if (!is_array($propertyValue)) { + return true; + } + if ($property->isInitialized($object)) { $value = $this->convert($value, $propertyValue, $tags); } else { $value = $this->convert($value, new $preparedPropertyType, $tags); } } + return false; } protected function grabValue(\ReflectionProperty $property, array $data, array $tags) @@ -244,6 +253,9 @@ class Data2DtoConverter } $tempValue = []; foreach ($value as $itemValue) { + if (!is_array($itemValue)) { + continue; + } $tempValue[] = $this->convert($itemValue, new $attributedPropertyClass, $tags); } $value = $tempValue;