/** * @param EntityMetadata $entityMetadata * @param array $config * @param MetadataContext $context */ protected function loadMetadataForRelatedEntities(EntityMetadata $entityMetadata, array $config, MetadataContext $context) { $associations = $entityMetadata->getAssociations(); foreach ($associations as $associationName => $association) { if (null !== $association->getTargetMetadata()) { // metadata for an associated entity is already loaded continue; } if (!isset($config[ConfigUtil::FIELDS][$associationName][ConfigUtil::FIELDS])) { // a configuration of an association fields does not exist continue; } $relatedEntityMetadata = $this->metadataProvider->getMetadata($association->getTargetClassName(), $context->getVersion(), $context->getRequestType(), $context->getExtras(), $config[ConfigUtil::FIELDS][$associationName]); if (null !== $relatedEntityMetadata) { $association->setTargetMetadata($relatedEntityMetadata); } } }
/** * @param EntityMetadata $entityMetadata * @param array $config */ protected function normalizeMetadata(EntityMetadata $entityMetadata, array $config) { $fields = ConfigUtil::getArrayValue($config, ConfigUtil::FIELDS); foreach ($fields as $fieldName => $fieldConfig) { if (null === $fieldConfig) { continue; } if (ConfigUtil::isExclude($fieldConfig)) { $entityMetadata->removeProperty($fieldName); } elseif (isset($fieldConfig[ConfigUtil::PROPERTY_PATH])) { $path = ConfigUtil::explodePropertyPath($fieldConfig[ConfigUtil::PROPERTY_PATH]); if (count($path) === 1) { $entityMetadata->renameProperty(reset($path), $fieldName); } } } if (ConfigUtil::isExcludeAll($config)) { $toRemoveFieldNames = array_diff(array_merge(array_keys($entityMetadata->getFields()), array_keys($entityMetadata->getAssociations())), array_keys($fields)); foreach ($toRemoveFieldNames as $fieldName) { $entityMetadata->removeProperty($fieldName); } } }