/** * @param string $className */ private function loadClassFields($className) { $fields = Container::instance()->get($className); if (!$fields) { new $className(); $fields = Container::instance()->get($className); } $fields = array_keys($fields); $this->fieldsByClassName[$className] = $this->getFieldsVariations($fields); }
public function __construct() { $className = get_class($this); if (!Container::instance()->has($className)) { Container::instance()->set($className, $this->_setup()); } $this->data = Container::instance()->get($className); $this->values = Container::instance()->getValues($className); $this->_p = new PrivateFields($this->values, $this->data, $this); }
/** * @param string $className * @return array */ private function getObjectFields($className) { $setup = Container::instance()->get($className); if (!$setup) { /** @var LiteObject $instance */ $instance = new $className(); $fields = $instance->getPropertyNames(); } else { $fields = array_keys($setup); } return $fields; }
/** * @param LiteObject $object * @param IMapperCollection $collection * @param \stdClass|array|null $value * @param MapperLoadHelpers $loaders * @param IValuesProcessorContainer $container * @return mixed */ private static function getObjectFromData(LiteObject $object, IMapperCollection $collection, $value, MapperLoadHelpers $loaders, IValuesProcessorContainer $container) { if (is_string($value)) { $value = json_decode($value); } $data = []; $className = get_class($object); $fieldMapper = $collection->getOrDefault($object); $setup = Container::instance()->get(get_class($object)); $processor = new LoadHelpersProcessor(); $processor->setLoadersContainer($loaders); $value = $processor->preMapProcess($className, $value); foreach ($value as $dataName => $dataValue) { $fieldName = $fieldMapper->mapToObjectField($dataName, get_class($object)); if (!$fieldName || !isset($setup[$fieldName])) { continue; } $fieldSetup = $setup[$fieldName]; if (isset($fieldSetup[SetupFields::INSTANCE_TYPE])) { $instanceType = $fieldSetup[SetupFields::INSTANCE_TYPE]; if ($fieldSetup[SetupFields::TYPE] == VarType::INSTANCE) { $fieldValue = new $instanceType(); self::getObjectFromData($fieldValue, $collection, $dataValue, $loaders, $container); } else { $fieldValue = []; foreach ($dataValue as $itemKey => $item) { $instance = new $instanceType(); self::getObjectFromData($instance, $collection, $item, $loaders, $container); $fieldValue[$itemKey] = $instance; } } } else { $fieldValue = $dataValue; } $data[$fieldName] = $fieldValue; } $data = $processor->postMapProcess($className, $data); return self::setFields($object, $data, $container); }
/** * @runInSeparateProcess */ public function test_getValues_FieldWithoutValueNotReturned() { $data = ['a' => [], 'b' => [SetupFields::VALUE => 2]]; Container::instance()->set('b', $data); $this->assertEquals(['b' => 2], Container::instance()->getValues('b')); }
/** * @param LiteObject $object * @return array */ private static function getObjectSetup(LiteObject $object) { return Container::instance()->get(get_class($object)); }