From 335c4d240ce58180a89a3599630b97ee27bf762d Mon Sep 17 00:00:00 2001 From: User Date: Sun, 27 Apr 2025 01:31:26 +0300 Subject: [PATCH] 20250427#1 --- src/Attribute/ValueObject.php | 2 +- ...tyName.php => ValueObjectFirstProperty.php} | 2 +- src/Attribute/ValueObjectPropertyName.php | 14 ++++++++++++++ src/Entity/ValueObjectInterface.php | 1 - src/Repository/AbstractRepository.php | 18 ++++++++++-------- 5 files changed, 26 insertions(+), 11 deletions(-) rename src/Attribute/{ValueObjectAutoPropertyName.php => ValueObjectFirstProperty.php} (72%) create mode 100644 src/Attribute/ValueObjectPropertyName.php diff --git a/src/Attribute/ValueObject.php b/src/Attribute/ValueObject.php index d34b48f..808e70b 100644 --- a/src/Attribute/ValueObject.php +++ b/src/Attribute/ValueObject.php @@ -8,8 +8,8 @@ use Attribute; class ValueObject { public function __construct( - public bool $autoPropertyName = false, public ?string $propertyName = null, + public bool $firstProperty = false ) {} } diff --git a/src/Attribute/ValueObjectAutoPropertyName.php b/src/Attribute/ValueObjectFirstProperty.php similarity index 72% rename from src/Attribute/ValueObjectAutoPropertyName.php rename to src/Attribute/ValueObjectFirstProperty.php index 3e6c4be..9f1de29 100644 --- a/src/Attribute/ValueObjectAutoPropertyName.php +++ b/src/Attribute/ValueObjectFirstProperty.php @@ -5,4 +5,4 @@ namespace Rmphp\Storage\Attribute; use Attribute; #[Attribute(Attribute::TARGET_CLASS)] -class ValueObjectAutoPropertyName {} +class ValueObjectFirstProperty {} diff --git a/src/Attribute/ValueObjectPropertyName.php b/src/Attribute/ValueObjectPropertyName.php new file mode 100644 index 0000000..4aa034a --- /dev/null +++ b/src/Attribute/ValueObjectPropertyName.php @@ -0,0 +1,14 @@ +getAttributes(ValueObject::class)) ? self::$classes[$valueObjectClass]->getAttributes(ValueObject::class)[0]->newInstance() : new ValueObject(); + if(!empty(self::$classes[$valueObjectClass]->getAttributes(ValueObjectFirstProperty::class))) { + self::$attributeObjects[$valueObjectClass]->firstProperty = true; + } + if(!empty(self::$classes[$valueObjectClass]->getAttributes(ValueObjectPropertyName::class))) { + $propertyName = self::$classes[$valueObjectClass]->getAttributes(ValueObjectPropertyName::class)[0]->newInstance(); + if(isset($propertyName->name)) self::$attributeObjects[$valueObjectClass]->propertyName = $propertyName->name; + } } $valueObjectAttributes = self::$attributeObjects[$valueObjectClass]; - if(!empty(self::$classes[$valueObjectClass]->getAttributes(ValueObjectAutoPropertyName::class))) $valueObjectAttributes->autoPropertyName = true; if(!empty($valueObjectAttributes->propertyName) && self::$classes[$valueObjectClass]->hasProperty($valueObjectAttributes->propertyName)){ if(self::$classes[$valueObjectClass]->getProperty($valueObjectAttributes->propertyName)->isInitialized($property->getValue($object))){ $fieldValue[$property->getName()] = self::$classes[$valueObjectClass]->getProperty($valueObjectAttributes->propertyName)->getValue($property->getValue($object)); } } - elseif(!empty($valueObjectAttributes->autoPropertyName) && count(self::$classes[$valueObjectClass]->getProperties()) === 1){ + elseif(!empty($valueObjectAttributes->firstProperty) && count(self::$classes[$valueObjectClass]->getProperties()) > 0){ if(self::$classes[$valueObjectClass]->getProperties()[0]->isInitialized($property->getValue($object))){ $fieldValue[$property->getName()] = self::$classes[$valueObjectClass]->getProperties()[0]->getValue($property->getValue($object)); } @@ -77,11 +84,6 @@ abstract class AbstractRepository extends AbstractDataObject implements Reposito elseif(self::$classes[$valueObjectClass]->hasMethod('getValue')){ $fieldValue[$property->getName()] = $property->getValue($object)->getValue(); } - elseif(count(self::$classes[$valueObjectClass]->getProperties()) === 1){ - if(self::$classes[$valueObjectClass]->getProperties()[0]->isInitialized($property->getValue($object))){ - $fieldValue[$property->getName()] = self::$classes[$valueObjectClass]->getProperties()[0]->getValue($property->getValue($object)); - } - } } elseif(is_bool($property->getValue($object))){ $fieldValue[$property->getName()] = (int)$property->getValue($object);