예제 #1
0
 /**
  * @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);
     }
 }
예제 #2
0
 /**
  * @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;
 }