/** * @param array $definition * @param ClassMetadata $metadata * @param string $version * @param string[] $requestType * @param array $extras * * @return array */ protected function getFields(array $definition, ClassMetadata $metadata, $version, array $requestType, array $extras) { $fieldNames = $metadata->getFieldNames(); foreach ($fieldNames as $fieldName) { if (array_key_exists($fieldName, $definition)) { // already defined continue; } $config = $this->fieldConfigProvider->getFieldConfig($metadata->name, $fieldName, $version, $requestType, $extras); if ($this->exclusionProvider->isIgnoredField($metadata, $fieldName)) { $config[ConfigUtil::DEFINITION][ConfigUtil::EXCLUDE] = true; } $definition[$fieldName] = $config; } return $definition; }
/** * Adds entity virtual fields to $result * * @param array $result * @param ClassMetadata $metadata * @param bool $applyExclusions * @param bool $translate */ protected function addVirtualFields(array &$result, ClassMetadata $metadata, $applyExclusions, $translate) { $className = $metadata->getName(); $virtualFields = $this->virtualFieldProvider->getVirtualFields($className); foreach ($virtualFields as $fieldName) { if ($applyExclusions && $this->exclusionProvider->isIgnoredField($metadata, $fieldName)) { continue; } $query = $this->virtualFieldProvider->getVirtualFieldQuery($className, $fieldName); $fieldLabel = isset($query['select']['label']) ? $query['select']['label'] : $this->getFieldLabel($className, $fieldName); $this->addField($result, $fieldName, $query['select']['return_type'], $fieldLabel, false, $translate); if (isset($query['select']['filter_by_id']) && $query['select']['filter_by_id']) { $result[$fieldName]['related_entity_name'] = $metadata->getAssociationTargetClass($fieldName); } } }
/** * Adds entity virtual fields to $result * * @param array $result * @param string $className * @param bool $withEntityDetails * @param bool $applyExclusions * @param bool $translate */ protected function addVirtualRelations(array &$result, $className, $withEntityDetails, $applyExclusions, $translate) { if (!$this->virtualRelationProvider) { return; } $metadata = $this->getMetadataFor($className); $virtualRelations = $this->virtualRelationProvider->getVirtualRelations($className); foreach ($virtualRelations as $associationName => $virtualRelation) { if ($applyExclusions && $this->exclusionProvider->isIgnoredField($metadata, $associationName)) { continue; } $fieldType = $virtualRelation['relation_type']; $targetClassName = $this->entityClassResolver->getEntityClass($virtualRelation['related_entity_name']); $label = !empty($virtualRelation['label']) ? $virtualRelation['label'] : $this->getFieldLabel($metadata, $associationName); $this->addRelation($result, $associationName, $fieldType, $label, $this->getRelationType($fieldType), $targetClassName, $withEntityDetails, $translate); } }