From 10f6d62b43834e475637097343e886f6e7dabc5b Mon Sep 17 00:00:00 2001 From: User Date: Thu, 27 Mar 2025 00:02:46 +0300 Subject: [PATCH] 20250327#1 --- src/Component/AbstractDataObject.php | 15 +++++++++++---- src/Repository/AbstractRepository.php | 18 ++++++++++++------ src/Repository/RepositoryInterface.php | 8 ++++---- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/Component/AbstractDataObject.php b/src/Component/AbstractDataObject.php index d79b34c..6d09d1d 100644 --- a/src/Component/AbstractDataObject.php +++ b/src/Component/AbstractDataObject.php @@ -16,10 +16,11 @@ class AbstractDataObject { * @param object $object * @param array $data * @param bool $update + * @param bool $onlyNotNull * @return mixed * @throws Exception */ - protected static function fillObject(ReflectionClass $class, object $object, array $data, bool $update = false) : mixed { + protected static function fillObject(ReflectionClass $class, object $object, array $data, bool $update = false, bool $onlyNotNull = false) : mixed { try { $value = []; foreach($class->getProperties() as $property){ @@ -45,11 +46,14 @@ class AbstractDataObject { if(is_object($value[$property->getName()])){ $object->{$property->getName()} = $value[$property->getName()]; } - elseif(isset($value[$property->getName()])){ + elseif(isset($value[$property->getName()]) && $value[$property->getName()] != ""){ + $object->{$property->getName()} = new ($property->getType()->getName())($value[$property->getName()]); + } + elseif(!$onlyNotNull && isset($value[$property->getName()])){ $object->{$property->getName()} = new ($property->getType()->getName())($value[$property->getName()]); } // Значения нет и VO может быть без параметров - elseif(self::isEmptyAvailable($property->getType()->getName())) { + elseif(!$onlyNotNull && self::isEmptyAvailable($property->getType()->getName())) { $object->{$property->getName()} = new ($property->getType()->getName())(); } } @@ -64,7 +68,10 @@ class AbstractDataObject { elseif($property->getType()->getName() == 'bool'){ $object->{$property->getName()} = (bool)$value[$property->getName()]; } - elseif(isset($value[$property->getName()])){ + elseif(isset($value[$property->getName()]) && $value[$property->getName()] != ""){ + $object->{$property->getName()} = $value[$property->getName()]; + } + elseif(!$onlyNotNull && isset($value[$property->getName()])){ $object->{$property->getName()} = $value[$property->getName()]; } } diff --git a/src/Repository/AbstractRepository.php b/src/Repository/AbstractRepository.php index 1fda3b9..7626e27 100644 --- a/src/Repository/AbstractRepository.php +++ b/src/Repository/AbstractRepository.php @@ -48,11 +48,14 @@ abstract class AbstractRepository extends AbstractDataObject implements Reposito } - /** @inheritDoc */ - public function createFromData(string $class, array|object $data) : object { + /** + * @inheritDoc + * @throws RepositoryException + */ + public function createFromData(string $class, array|object $data, bool $onlyNotNull = false) : object { try { if(!isset(self::$classes[$class])) self::$classes[$class] = new ReflectionClass($class); - return self::fillObject(self::$classes[$class], new $class, (is_object($data)) ? get_object_vars($data) : $data); + return self::fillObject(self::$classes[$class], new $class, (is_object($data)) ? get_object_vars($data) : $data, false, $onlyNotNull); } catch (Exception $exception) { throw new RepositoryException($exception->getMessage()); @@ -60,12 +63,15 @@ abstract class AbstractRepository extends AbstractDataObject implements Reposito } - /** @inheritDoc */ - public function updateFromData(object $object, array|object $data) : object { + /** + * @inheritDoc + * @throws RepositoryException + */ + public function updateFromData(object $object, array|object $data, bool $onlyNotNull = false) : object { try { $class = get_class($object); if(!isset(self::$classes[$class])) self::$classes[$class] = new ReflectionClass($class); - return self::fillObject(self::$classes[$class], clone $object, (is_object($data)) ? get_object_vars($data) : $data, true); + return self::fillObject(self::$classes[$class], clone $object, (is_object($data)) ? get_object_vars($data) : $data, true, $onlyNotNull); } catch (Exception $exception) { throw new RepositoryException($exception->getMessage()); diff --git a/src/Repository/RepositoryInterface.php b/src/Repository/RepositoryInterface.php index 45aaa2b..5125afc 100644 --- a/src/Repository/RepositoryInterface.php +++ b/src/Repository/RepositoryInterface.php @@ -25,19 +25,19 @@ interface RepositoryInterface { /** * @param string $class * @param array|object $data + * @param bool $onlyNotNull * @return mixed - * @throws RepositoryException */ - public function createFromData(string $class, array|object $data) : mixed; + public function createFromData(string $class, array|object $data, bool $onlyNotNull = false) : mixed; /** * @param object $object * @param array|object $data + * @param bool $onlyNotNull * @return mixed - * @throws RepositoryException */ - public function updateFromData(object $object, array|object $data) : mixed; + public function updateFromData(object $object, array|object $data, bool $onlyNotNull = false) : mixed; /**