/** * Reads extension metadata * * @param ClassMetadataInfo $meta * @return array - the metatada configuration */ public function getExtensionMetadata(ClassMetadataInfo $meta) { if ($meta->isMappedSuperclass) { return; // ignore mappedSuperclasses for now } $config = array(); // collect metadata from inherited classes foreach (array_reverse(class_parents($meta->name)) as $parentClass) { // read only inherited mapped classes if ($this->_em->getMetadataFactory()->hasMetadataFor($parentClass)) { $this->_driver->readExtendedMetadata($this->_em->getClassMetadata($parentClass), $config); } } $this->_driver->readExtendedMetadata($meta, $config); $this->_driver->validateFullMetadata($meta, $config); if ($config) { // cache the metadata $cacheId = self::getCacheId($meta->name, $this->_extensionNamespace); if ($cacheDriver = $this->_em->getMetadataFactory()->getCacheDriver()) { $cacheDriver->save($cacheId, $config, null); } } return $config; }
/** * Reads extension metadata * * @param object $meta * @return array - the metatada configuration */ public function getExtensionMetadata($meta) { if ($meta->isMappedSuperclass) { return; // ignore mappedSuperclasses for now } $config = array(); $cmf = $this->objectManager->getMetadataFactory(); $useObjectName = $meta->name; // collect metadata from inherited classes if (null !== $meta->reflClass) { foreach (array_reverse(class_parents($meta->name)) as $parentClass) { // read only inherited mapped classes if ($cmf->hasMetadataFor($parentClass)) { $class = $this->objectManager->getClassMetadata($parentClass); $this->driver->readExtendedMetadata($class, $config); $isBaseInheritanceLevel = !$class->isInheritanceTypeNone() && !$class->parentClasses && $config; if ($isBaseInheritanceLevel) { $useObjectName = $class->name; } } } } $this->driver->readExtendedMetadata($meta, $config); if ($config) { $config['useObjectClass'] = $useObjectName; } // cache the metadata (even if it's empty) // caching empty metadata will prevent re-parsing non-existent annotations $cacheId = self::getCacheId($meta->name, $this->extensionNamespace); if ($cacheDriver = $cmf->getCacheDriver()) { $cacheDriver->save($cacheId, $config, null); } return $config; }
/** * Reads extension metadata * * @param ClassMetadata $meta * @return array - the metatada configuration */ public function getExtensionMetadata(ClassMetadata $meta) { if ($meta->isMappedSuperclass) { return; // ignore mappedSuperclasses for now } $config = $supperclass = array(); $useObjectName = $meta->name; // collect metadata from inherited classes if (!$this->objectManager->getMetadataFactory() instanceof DisconnectedClassMetadataFactory) { foreach (array_reverse(class_parents($meta->name)) as $parentClass) { // read only inherited mapped classes if ($this->objectManager->getMetadataFactory()->hasMetadataFor($parentClass)) { $class = $this->objectManager->getClassMetadata($parentClass); $partial = array(); $this->driver->readExtendedMetadata($class, $partial); if ($class->isMappedSuperclass) { $supperclass += $partial; } elseif (!$class->isInheritanceTypeNone()) { $this->driver->validateFullMetadata($class, $supperclass + $partial); if ($partial) { $useObjectName = $class->name; } } $config += $partial; } } } $this->driver->readExtendedMetadata($meta, $config); if ($config) { $this->driver->validateFullMetadata($meta, $config); $config['useObjectClass'] = $useObjectName; } // cache the metadata (even if it's empty) // caching empty metadata will prevent re-parsing non-existent annotations $cacheId = self::getCacheId($meta->name, $this->extensionNamespace); if ($cacheDriver = $this->objectManager->getMetadataFactory()->getCacheDriver()) { $cacheDriver->save($cacheId, $config, null); } return $config; }