Exemplo n.º 1
0
 /**
  * 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;
 }