metadataPool = $metadataPool; $this->objectManager = $objectManager; $this->providers = $providers; } /** * Returns array of fields * * @param string $entityType * @return array * @throws \Exception */ public function getAttributes($entityType) { if (!isset($this->registry[$entityType])) { $metadata = $this->metadataPool->getMetadata($entityType); $this->registry[$entityType] = $metadata->getEntityConnection()->describeTable($metadata->getEntityTable()); if ($metadata->getLinkField() != $metadata->getIdentifierField()) { unset($this->registry[$entityType][$metadata->getLinkField()]); } $providers = []; if (isset($this->providers[$entityType])) { $providers = $this->providers[$entityType]; } elseif (isset($this->providers['default'])) { $providers = $this->providers['default']; } foreach ($providers as $providerClass) { $provider = $this->objectManager->get($providerClass); $this->registry[$entityType] = array_merge( $this->registry[$entityType], $provider->getAttributes($entityType) ); } } return $this->registry[$entityType]; } }