Once populated, ClassMetadata instances are usually cached in a serialized form.
IMPORTANT NOTE:
The fields of this class are only public for 2 reasons:
1) To allow fast READ access.
2) To drastically reduce the size of a serialized instance (private/protected members
get the whole class name, namespace inclusive, prepended to every property in
the serialized representation).
/** * @depends testEntityXmlName * @param \Doctrine\OXM\Mapping\ClassMetadata $class */ public function testNamespaces($class) { $this->assertEquals(2, count($class->getXmlNamespaces())); $this->assertContains(array('url' => 'http://www.schema.com/foo', 'prefix' => 'foo'), $class->getXmlNamespaces()); $this->assertContains(array('url' => 'http://www.schema.com/bar', 'prefix' => 'bar'), $class->getXmlNamespaces()); return $class; }
/** * Generates the code for the __sleep method for a proxy class. * * @param $class * @return string */ private function generateSleep(ClassMetadata $class) { $sleepImpl = ''; if ($class->reflClass->hasMethod('__sleep')) { $sleepImpl .= 'return parent::__sleep();'; } else { $sleepImpl .= 'return array('; $first = true; foreach ($class->getReflectionProperties() as $name => $prop) { if ($first) { $first = false; } else { $sleepImpl .= ', '; } $sleepImpl .= "'" . $name . "'"; } $sleepImpl .= ');'; } return $sleepImpl; }
/** * Adds inherited fields to the subclass mapping. * * @param ClassMetadata $subClass * @param ClassMetadata $parentClass */ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) { foreach ($parentClass->fieldMappings as $fieldName => $mapping) { if (!isset($mapping['inherited']) && !$parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } if (!isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } $subClass->addInheritedFieldMapping($mapping); } foreach ($parentClass->reflFields as $name => $field) { $subClass->reflFields[$name] = $field; } }
/** * @param WriterHelper $writer * @param ClassMetadata $classMetadata * @param string $fieldName * @param mixed $fieldValue */ private function _writeElement(WriterHelper $writer, ClassMetadata $classMetadata, $fieldName, $fieldValue) { $fieldType = $classMetadata->getTypeOfField($fieldName); if ($this->classMetadataFactory->hasMetadataFor($fieldType)) { if ($classMetadata->isCollection($fieldName)) { foreach ($fieldValue as $value) { $this->doMarshal($value, $writer); } } else { $this->doMarshal($fieldValue, $writer); } } }
/** * @param \Doctrine\OXM\Mapping\ClassMetadata $class * @param $xmlEntity * @return void */ private function persistNew($class, $xmlEntity) { $oid = spl_object_hash($xmlEntity); if (isset($class->lifecycleCallbacks[Events::prePersist])) { $class->invokeLifecycleCallbacks(Events::prePersist, $xmlEntity); } if ($this->evm->hasListeners(Events::prePersist)) { $this->evm->dispatchEvent(Events::prePersist, new Event\LifecycleEventArgs($xmlEntity, $this->xem)); } $idGen = $class->idGenerator; if (!$idGen->isPostInsertGenerator()) { $idValue = $idGen->generate($this->xem, $xmlEntity); if (!$idGen instanceof \Doctrine\OXM\Id\AssignedGenerator) { $this->entityIdentifiers[$oid] = array($class->identifier => $idValue); $class->setIdentifierValue($xmlEntity, $this->entityIdentifiers[$oid]); } else { $this->entityIdentifiers[$oid] = $idValue; } } $this->entityStates[$oid] = self::STATE_MANAGED; $this->scheduleForInsert($xmlEntity); }
/** * @param WriterHelper $writer * @param ClassMetadata $classMetadata * @param string $fieldName * @param mixed $fieldValue */ private function writeElement(WriterHelper $writer, ClassMetadata $classMetadata, $fieldName, $fieldValue) { $fieldType = $classMetadata->getTypeOfField($fieldName); $mapping = $classMetadata->getFieldMapping($fieldName); $prefix = isset($mapping['prefix']) ? $mapping['prefix'] : null; if ($this->classMetadataFactory->hasMetadataFor($fieldType)) { if ($classMetadata->isCollection($fieldName)) { if ($classMetadata->hasFieldWrapping($fieldName)) { $writer->startElement($mapping['wrapper'], $prefix); } foreach ($fieldValue as $value) { $this->doMarshal($value, $writer); } if ($classMetadata->hasFieldWrapping($fieldName)) { $writer->endElement(); } } else { $this->doMarshal($fieldValue, $writer); } } }
public function delete($xmlEntity, array $options = array()) { return $this->storage->delete($this->metadata, $this->metadata->getIdentifierValue($xmlEntity)); }
/** * Returns the class name of the object managed by the repository * * @return string */ function getClassName() { return $this->class->getName(); }