/** * {@inheritdoc} */ public function denormalize($data, $class, $format = null, array $context = []) { $result = $this->createObject($class); $fields = $this->fieldHelper->getFields($class, true); foreach ($fields as $field) { $fieldName = $field['name']; if (array_key_exists($fieldName, $data)) { $value = $data[$fieldName]; if ($data[$fieldName] !== null && ($this->fieldHelper->isRelation($field) || $this->fieldHelper->isDateTimeField($field))) { if ($this->fieldHelper->isMultipleRelation($field)) { $entityClass = sprintf('ArrayCollection<%s>', $field['related_entity_name']); } elseif ($this->fieldHelper->isSingleRelation($field)) { $entityClass = $field['related_entity_name']; } else { $entityClass = 'DateTime'; $context = array_merge($context, ['type' => $field['type']]); } $context = array_merge($context, ['fieldName' => $fieldName]); $value = $this->serializer->denormalize($value, $entityClass, $format, $context); } $this->fieldHelper->setObjectValue($result, $fieldName, $value); } } return $result; }
/** * @param object $basicEntity * @param object $importedEntity * @param array $excludedProperties * @throws InvalidArgumentException */ public function importEntity($basicEntity, $importedEntity, array $excludedProperties = array()) { $basicEntityClass = ClassUtils::getClass($basicEntity); if ($basicEntityClass != ClassUtils::getClass($importedEntity)) { throw new InvalidArgumentException('Basic and imported entities must be instances of the same class'); } $entityMetadata = $this->getEntityManager($basicEntityClass)->getClassMetadata($basicEntityClass); $importedEntityProperties = array_diff(array_merge($entityMetadata->getFieldNames(), $entityMetadata->getAssociationNames()), $excludedProperties); foreach ($importedEntityProperties as $propertyName) { $importedValue = $this->fieldHelper->getObjectValue($importedEntity, $propertyName); $this->fieldHelper->setObjectValue($basicEntity, $propertyName, $importedValue); } }
/** * @param object $object * @param string $fieldName * @param mixed $value * @param array $exception * * @dataProvider objectValueProvider */ public function testGetObjectValue($object, $fieldName, $value, array $exception) { if ($exception) { list($class, $message) = $exception; $this->setExpectedException($class, $message); } $this->assertEquals(null, $this->helper->getObjectValue($object, $fieldName)); $this->helper->setObjectValue($object, $fieldName, $value); $this->assertEquals($value, $this->helper->getObjectValue($object, $fieldName)); }
/** * @param object $entity * @param array $searchContext * @return null|object */ protected function findExistingEntity($entity, array $searchContext = []) { $entityName = ClassUtils::getClass($entity); $identifier = $this->databaseHelper->getIdentifier($entity); $existingEntity = null; // find by identifier if ($identifier) { $existingEntity = $this->databaseHelper->find($entityName, $identifier); } // find by identity fields if (!$existingEntity && (!$searchContext || $this->databaseHelper->getIdentifier(current($searchContext)))) { $existingEntity = $this->findExistingEntityByIdentityFields($entity, $searchContext); } if ($existingEntity && !$identifier) { $identifier = $this->databaseHelper->getIdentifier($existingEntity); $identifierName = $this->databaseHelper->getIdentifierFieldName($entity); $this->fieldHelper->setObjectValue($entity, $identifierName, $identifier); } return $existingEntity; }