Doctrine\OXM\Mapping\ClassMetadataFactory::getMetadataFor PHP Method

getMetadataFor() public method

Gets the class metadata descriptor for a class.
public getMetadataFor ( string $className ) : ClassMetadata
$className string The name of the class.
return ClassMetadata
    public function getMetadataFor($className)
    {
        if (!isset($this->loadedMetadata[$className])) {
            //            print_r('loading class ' . $className . "\n");
            $realClassName = $className;
            // Check for namespace alias
            if (strpos($className, ':') !== false) {
                list($namespaceAlias, $simpleClassName) = explode(':', $className);
                $realClassName = $this->configuration->getEntityNamespace($namespaceAlias) . '\\' . $simpleClassName;
                if (isset($this->loadedMetadata[$realClassName])) {
                    // We do not have the alias name in the map, include it
                    $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName];
                    return $this->loadedMetadata[$realClassName];
                }
            }
            if ($this->cacheDriver) {
                if (($cached = $this->cacheDriver->fetch("{$realClassName}\$XMLCLASSMETADATA")) !== false) {
                    $this->loadedMetadata[$realClassName] = $cached;
                    if (!$cached->isMappedSuperclass) {
                        $this->xmlToClassMap[$cached->getXmlName()] = $realClassName;
                    }
                } else {
                    foreach ($this->loadMetadata($realClassName) as $loadedClassName) {
                        $this->cacheDriver->save("{$loadedClassName}\$XMLCLASSMETADATA", $this->loadedMetadata[$loadedClassName], null);
                    }
                }
            } else {
                $this->loadMetadata($realClassName);
            }
            if ($className != $realClassName) {
                // We do not have the alias name in the map, include it
                $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName];
            }
        }
        return $this->loadedMetadata[$className];
    }

Usage Example

示例#1
0
 /**
  * INTERNAL: Performance sensitive method
  *
  * @throws MarshallerException
  * @param object $mappedObject
  * @param WriterHelper $writer
  * @return void
  */
 private function doMarshal($mappedObject, WriterHelper $writer)
 {
     $className = get_class($mappedObject);
     $classMetadata = $this->classMetadataFactory->getMetadataFor($className);
     if (!$this->classMetadataFactory->hasMetadataFor($className)) {
         throw MarshallerException::mappingNotFoundForClass($className);
     }
     // PreMarshall Hook
     if ($classMetadata->hasLifecycleCallbacks(Events::preMarshal)) {
         $classMetadata->invokeLifecycleCallbacks(Events::preMarshal, $mappedObject);
     }
     $writer->startElement($classMetadata->getXmlName());
     $namespaces = $classMetadata->getXmlNamespaces();
     if (!empty($namespaces)) {
         foreach ($namespaces as $namespace) {
             $writer->writeNamespace($namespace['url'], $namespace['prefix']);
         }
     }
     // build ordered field mappings for this class
     $fieldMappings = $classMetadata->getFieldMappings();
     $orderedMap = array();
     if (!empty($fieldMappings)) {
         foreach ($fieldMappings as $fieldMapping) {
             $orderedMap[$fieldMapping['node']][] = $fieldMapping;
         }
     }
     // do attributes
     if (array_key_exists(ClassMetadata::XML_ATTRIBUTE, $orderedMap)) {
         foreach ($orderedMap[ClassMetadata::XML_ATTRIBUTE] as $fieldMapping) {
             $fieldName = $fieldMapping['fieldName'];
             $fieldValue = $classMetadata->getFieldValue($mappedObject, $fieldName);
             if ($classMetadata->isRequired($fieldName) && $fieldValue === null) {
                 throw MarshallerException::fieldRequired($className, $fieldName);
             }
             if ($fieldValue !== null || $classMetadata->isNillable($fieldName)) {
                 $this->_writeAttribute($writer, $classMetadata, $fieldName, $fieldValue);
             }
         }
     }
     // do text
     if (array_key_exists(ClassMetadata::XML_TEXT, $orderedMap)) {
         foreach ($orderedMap[ClassMetadata::XML_TEXT] as $fieldMapping) {
             $fieldName = $fieldMapping['fieldName'];
             $fieldValue = $classMetadata->getFieldValue($mappedObject, $fieldName);
             if ($classMetadata->isRequired($fieldName) && $fieldValue === null) {
                 throw MarshallerException::fieldRequired($className, $fieldName);
             }
             if ($fieldValue !== null || $classMetadata->isNillable($fieldName)) {
                 $this->_writeText($writer, $classMetadata, $fieldName, $fieldValue);
             }
         }
     }
     // do elements
     if (array_key_exists(ClassMetadata::XML_ELEMENT, $orderedMap)) {
         foreach ($orderedMap[ClassMetadata::XML_ELEMENT] as $fieldMapping) {
             $fieldName = $fieldMapping['fieldName'];
             $fieldValue = $classMetadata->getFieldValue($mappedObject, $fieldName);
             if ($classMetadata->isRequired($fieldName) && $fieldValue === null) {
                 throw MarshallerException::fieldRequired($className, $fieldName);
             }
             if ($fieldValue !== null || $classMetadata->isNillable($fieldName)) {
                 $this->_writeElement($writer, $classMetadata, $fieldName, $fieldValue);
             }
         }
     }
     // PostMarshal hook
     if ($classMetadata->hasLifecycleCallbacks(Events::postMarshal)) {
         $classMetadata->invokeLifecycleCallbacks(Events::postMarshal, $mappedObject);
     }
     $writer->endElement();
 }
All Usage Examples Of Doctrine\OXM\Mapping\ClassMetadataFactory::getMetadataFor