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