/** * {@inheritdoc} */ public function process(ContextInterface $context) { /** @var ConfigContext $context */ /** @var array $definition */ $definition = $context->getResult(); if (empty($definition) || !array_key_exists(ConfigUtil::FIELDS, $definition)) { // virtual fields is added only if a definition of fields exists return; } $entityClass = $context->getClassName(); $virtualFields = $this->virtualFieldProvider->getVirtualFields($entityClass); if (!empty($virtualFields)) { foreach ($virtualFields as $field) { $query = $this->virtualFieldProvider->getVirtualFieldQuery($entityClass, $field); $propertyPath = $this->getPropertyPath($query); if (!empty($propertyPath)) { $definition[ConfigUtil::FIELDS][$field][ConfigUtil::PROPERTY_PATH] = $propertyPath; if (!empty($query['select']['label']) && $context->hasExtra(DescriptionsConfigExtra::NAME)) { $definition[ConfigUtil::FIELDS][$field][ConfigUtil::LABEL] = new Label($query['select']['label']); } } } $context->setResult($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); } } }
protected function loadVirtualFields() { $entities = $this->cache->getEntities(); foreach ($entities as $className => $entityData) { $virtualFields = $this->virtualFieldProvider->getVirtualFields($className); if (!empty($virtualFields)) { foreach ($virtualFields as $fieldName) { if (null === $this->cache->getConfigurable($className, $fieldName)) { $this->cache->saveConfigurable(false, $className, $fieldName); } } } $virtualRelations = $this->virtualRelationProvider->getVirtualRelations($className); if (!empty($virtualRelations)) { foreach ($virtualRelations as $fieldName => $config) { if (null === $this->cache->getConfigurable($className, $fieldName)) { $this->cache->saveConfigurable(false, $className, $fieldName); } } } } }