/** * 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; }
/** * {@inheritDoc} */ public function readExtendedMetadata($meta, array &$config) { foreach ($this->_drivers as $namespace => $driver) { if (strpos($meta->name, $namespace) === 0) { $driver->readExtendedMetadata($meta, $config); return; } } if (null !== $this->defaultDriver) { $this->defaultDriver->readExtendedMetadata($meta, $config); return; } // commenting it for customized mapping support, debugging of such cases might get harder //throw new \Gedmo\Exception\UnexpectedValueException('Class ' . $meta->name . ' is not a valid entity or mapped super class.'); }