/** * @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)); }
/** * {@inheritdoc} */ public function getMaxRelatedEntities($entityName, $fieldName) { $maxFields = 1; $fixtures = $this->templateManager->getEntityFixture($entityName)->getData(); foreach ($fixtures as $fixture) { try { $fieldValue = $this->fieldHelper->getObjectValue($fixture, $fieldName); if ($fieldValue instanceof \Countable || is_array($fieldValue)) { $itemsCount = count($fieldValue); if ($itemsCount > $maxFields) { $maxFields = $itemsCount; } } } catch (\Exception $e) { // there is no $fieldName in fixture continue; } } return $maxFields; }
/** * {@inheritdoc} */ public function normalize($object, $format = null, array $context = []) { $entityName = ClassUtils::getClass($object); $fields = $this->fieldHelper->getFields($entityName, true); $result = []; foreach ($fields as $field) { $fieldName = $field['name']; if ($this->isFieldSkippedForNormalization($entityName, $fieldName, $context)) { continue; } $fieldValue = $this->fieldHelper->getObjectValue($object, $fieldName); if (is_object($fieldValue)) { $fieldContext = $context; $fieldContext['fieldName'] = $fieldName; if (method_exists($object, 'getId')) { $fieldContext['entityId'] = $object->getId(); } $isFullMode = $this->fieldHelper->getConfigValue($entityName, $fieldName, 'full'); // Do not export relation in short mode if it does not contain identity fields if (!$isFullMode && isset($field['related_entity_name']) && $this->fieldHelper->hasConfig($field['related_entity_name']) && !$this->hasIdentityFields($field['related_entity_name'])) { continue; } if ($this->fieldHelper->isRelation($field)) { if ($isFullMode) { $fieldContext['mode'] = self::FULL_MODE; } else { $fieldContext['mode'] = self::SHORT_MODE; } } if ($this->fieldHelper->isDateTimeField($field)) { $fieldContext['type'] = $field['type']; } $fieldValue = $this->serializer->normalize($fieldValue, $format, $fieldContext); } $result[$fieldName] = $fieldValue; } return $result; }