/**
  * 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;
 }
Ejemplo n.º 2
0
 /**
  * {@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.');
 }