/** * {@inheritdoc} */ public function transform($class, $property, $value, $config) { if (isset($config[ConfigUtil::DATA_TRANSFORMER])) { foreach ((array) $config[ConfigUtil::DATA_TRANSFORMER] as $transformer) { $value = $this->transformByCustomTransformer($transformer, $class, $property, $value, $config); } } return null !== $this->baseDataTransformer ? $this->baseDataTransformer->transform($class, $property, $value, $config) : $value; }
/** * @param mixed $entity * @param string $entityClass * @param array $config * * @return array */ protected function serializeItem($entity, $entityClass, $config) { if (!$entity) { return []; } $result = []; $entityMetadata = $this->doctrineHelper->getEntityMetadata($entityClass); $resultFields = $this->getFieldsToSerialize($entityClass, $config); foreach ($resultFields as $field) { $value = null; if ($this->dataAccessor->tryGetValue($entity, $field, $value)) { $targetConfig = $this->getFieldConfig($config, $field); if ($entityMetadata->isAssociation($field)) { if ($value !== null) { if (!empty($targetConfig['fields'])) { if (is_string($targetConfig['fields'])) { $value = $this->dataAccessor->getValue($value, $targetConfig['fields']); $value = $this->dataTransformer->transform($entityClass, $field, $value, $targetConfig); } else { $value = $this->serializeItem($value, $entityMetadata->getAssociationTargetClass($field), $targetConfig); } } else { $value = $this->dataTransformer->transform($entityClass, $field, $value, $targetConfig); } } } else { $value = $this->dataTransformer->transform($entityClass, $field, $value, $targetConfig); } $result[$this->getResultFieldName($field, $targetConfig)] = $value; } elseif ($this->isMetadataField($field)) { $result[$this->getResultFieldName($field, $this->getFieldConfig($config, $field))] = $this->getMetadataFieldValue($entity, $field, $entityMetadata); } } return $result; }
/** * @param mixed $entity * @param string $entityClass * @param array $config * * @return array */ protected function serializeItem($entity, $entityClass, $config) { if (!$entity) { return []; } $result = []; $entityMetadata = $this->doctrineHelper->getEntityMetadata($entityClass); $resultFields = $this->fieldAccessor->getFieldsToSerialize($entityClass, $config); foreach ($resultFields as $field) { $value = null; if ($this->dataAccessor->tryGetValue($entity, $field, $value)) { $targetConfig = ConfigUtil::getFieldConfig($config, $field); if ($entityMetadata->isAssociation($field)) { if ($value !== null) { if (!empty($targetConfig[ConfigUtil::FIELDS])) { $targetEntityClass = $entityMetadata->getAssociationTargetClass($field); $targetEntityId = $this->dataAccessor->getValue($value, $this->doctrineHelper->getEntityIdFieldName($targetEntityClass)); $value = $this->serializeItem($value, $targetEntityClass, $targetConfig); $items = [$value]; $this->loadRelatedData($items, $targetEntityClass, [$targetEntityId], $targetConfig); $value = reset($items); if (isset($targetConfig[ConfigUtil::POST_SERIALIZE])) { $value = $this->postSerialize($value, $targetConfig[ConfigUtil::POST_SERIALIZE]); } } else { $value = $this->dataTransformer->transform($entityClass, $field, $value, $targetConfig); } } } else { $value = $this->dataTransformer->transform($entityClass, $field, $value, $targetConfig); } $result[$field] = $value; } elseif ($this->fieldAccessor->isMetadataProperty($field)) { $result[$field] = $this->fieldAccessor->getMetadataProperty($entity, $field, $entityMetadata); } } return $result; }