/** * @param string * @param \Doctrine\ORM\Mapping\ClassMetadataInfo */ public function loadMetadataForClass($className, \Doctrine\ORM\Mapping\ClassMetadataInfo $metadata) { parent::loadMetadataForClass($className, $metadata); if ($metadata instanceof \Nella\Doctrine\Mapping\ClassMetadata) { $class = \Nette\Reflection\ClassType::from($className); if ($class->hasAnnotation('service')) { $service = $class->getAnnotation('service'); if (!isset($service['class'])) { throw new \Doctrine\ORM\Mapping\MappingException("Missing service class."); } $metadata->setServiceClass($service['class']); } } }
/** * {@inheritDoc} */ public function loadMetadataForClass($className, ClassMetadata $metadata) { /* @var $metadata \Doctrine\ORM\Mapping\ClassMetadataInfo */ parent::loadMetadataForClass($className, $metadata); $classAnnotations = $this->getClassAnnotations($metadata); if (isset($classAnnotations['Pj\\EntityExtendBundle\\Mapping\\ExtendedEntity'])) { /** @var ExtendedEntity $annotation */ $annotation = $classAnnotations['Pj\\EntityExtendBundle\\Mapping\\ExtendedEntity']; $extendedEntityClass = $annotation->className; $cmf = $this->em->getMetadataFactory(); /** @var \Doctrine\ORM\Mapping\ClassMetadataInfo $extendedEntityMetadata */ $extendedEntityMetadata = $cmf->getMetadataFor($extendedEntityClass); // Set by parent entity. $metadata->setPrimaryTable($extendedEntityMetadata->table); } }
/** * @group DDC-3272 */ public function testMappedSuperclassAnnotationGeneration() { $metadata = new ClassMetadataInfo($this->_namespace . '\\EntityGeneratorBook'); $metadata->namespace = $this->_namespace; $metadata->isMappedSuperclass = true; $this->_generator->setAnnotationPrefix('ORM\\'); $this->_generator->writeEntityClass($metadata, $this->_tmpDir); $this->newInstance($metadata); // force instantiation (causes autoloading to kick in) $driver = new AnnotationDriver(new AnnotationReader(), array()); $cm = new ClassMetadata($metadata->name); $cm->initializeReflection(new RuntimeReflectionService()); $driver->loadMetadataForClass($cm->name, $cm); $this->assertTrue($cm->isMappedSuperclass); }