/** * Returns collection of denormalized data * * @param mixed $data * @param string $class * @param mixed $format * @param array $context * @return ArrayCollection */ public function denormalize($data, $class, $format = null, array $context = array()) { if (!is_array($data)) { return new ArrayCollection(); } $itemType = $this->getItemType($class); if (!$itemType) { return new ArrayCollection($data); } $result = new ArrayCollection(); foreach ($data as $item) { $result->add($this->serializer->denormalize($item, $itemType, $format, $context)); } return $result; }
/** * @param array $data * @param string $name * @param string $type * @param mixed $format * @param array $context * * @return null|object */ protected function denormalizeObject(array $data, $name, $type, $format = null, $context = array()) { $result = null; if (!empty($data[$name])) { $result = $this->serializer->denormalize($data[$name], $type, $format, $context); } return $result; }
/** * {@inheritdoc} */ public function normalize($object, $format = null, array $context = array()) { $entityName = ClassUtils::getClass($object); $fields = $this->fieldHelper->getFields($entityName, true); $result = array(); $propertyAccessor = PropertyAccess::createPropertyAccessor(); foreach ($fields as $field) { $fieldName = $field['name']; // Do not normalize excluded fields if ($this->fieldHelper->getConfigValue($entityName, $fieldName, 'excluded')) { continue; } // Do not normalize non identity fields for short mode if ($this->getMode($context) == self::SHORT_MODE && !$this->fieldHelper->getConfigValue($entityName, $fieldName, 'identity')) { continue; } $fieldValue = $propertyAccessor->getValue($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_type']) && $this->fieldHelper->hasConfig($field['related_entity_type']) && !$this->hasIdentityFields($field['related_entity_type'])) { continue; } if ($this->fieldHelper->isRelation($field)) { if ($isFullMode) { $fieldContext['mode'] = self::FULL_MODE; } else { $fieldContext['mode'] = self::SHORT_MODE; } } $fieldValue = $this->serializer->normalize($fieldValue, $format, $fieldContext); } $result[$fieldName] = $fieldValue; } return $result; }
/** * {@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; }
/** * @param mixed $data * @param string $class * @param mixed $format * @param array $context * @return mixed */ public function denormalize($data, $class, $format = null, array $context = array()) { $fieldRules = $this->getProcessedFieldRules(); if (!is_array($data)) { if ($this->primaryField) { $data = array($this->primaryField['normalizeName'] => $data); } else { return $this->createNewObject(); } } $object = $this->createNewObject(); foreach ($fieldRules as $field) { if (!$field['denormalize'] || !array_key_exists($field['normalizeName'], $data)) { continue; } $value = $data[$field['normalizeName']]; if (isset($field['type']) && $value !== null) { $value = $this->serializer->denormalize($data[$field['normalizeName']], $field['type'], $format, array_merge($context, $field['context'])); } $this->getPropertyAccessor()->setValue($object, $field['denormalizeName'], $value); } return $object; }