/** * @inheritdoc */ public function loadMetadataForClass($className, ClassMetadata $metadata) { $className = ltrim($className, '\\'); if (!in_array($className, $this->entityClasses, true)) { throw new \InvalidArgumentException(sprintf('Class "%s" is not within the allowed set of entities.', $className)); } $this->wrapped->loadMetadataForClass($className, $metadata); }
/** * {@inheritdoc} */ public function loadMetadataForClass($className, ClassMetadata $class) { if (strpos($className, self::NAME_SPACE) === 0) { $this->builtinDriver->loadMetadataForClass($className, $class); return; } $this->wrappedDriver->loadMetadataForClass($className, $class); }
/** * {@inheritDoc} */ protected function doLoadMetadata($class, $parent, $rootEntityFound) { try { $this->driver->loadMetadataForClass($class->getName(), $class); } catch (Exception $e) { throw $e; } }
/** * Actually load the metadata from the underlying metadata * * @param ClassMetadataInterface|ClassMetadata $class * @param ClassMetadataInterface|ClassMetadata $parent * @param bool $rootEntityFound * @param array $nonSuperclassParents */ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents) { //Manipulates $classMetadata; $this->driver->loadMetadataForClass($class->getName(), $class); if ($this->evm->hasListeners(Events::loadClassMetadata)) { $eventArgs = new LoadClassMetadataEventArgs($class, $this->sm); $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } }
/** * Loads the metadata of the specified class * * @param string $nameName The name of the class for which the metadata * should be loaded. * * @return ClassMetadata */ protected function loadMetadata($className) { if (false === isset($this->loadedMetadata[$className])) { if (null === ($class = $this->driver->loadMetadataForClass($className))) { // FIXXME Improve this throw new \Exception("Can't load metadata for {$className}"); } $this->completeMetadata($class); $this->loadedMetadata[$className] = $class; } return $this->loadedMetadata[$className]; }
/** * {@inheritDoc} */ public function loadMetadataForClass($className, ClassMetadata $metadata) { /* @var $driver MappingDriver */ foreach ($this->drivers as $namespace => $driver) { if (strpos($className, $namespace) === 0) { $driver->loadMetadataForClass($className, $metadata); return; } } if (null !== $this->defaultDriver) { $this->defaultDriver->loadMetadataForClass($className, $metadata); return; } throw MappingException::classNotFoundInNamespaces($className, array_keys($this->drivers)); }
/** * {@inheritDoc} */ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents) { /* @var $class ClassMetadata */ /* @var $parent ClassMetadata */ if ($parent) { $class->setInheritanceType($parent->inheritanceType); $class->setDiscriminatorColumn($parent->discriminatorColumn); $class->setIdGeneratorType($parent->generatorType); $this->addInheritedFields($class, $parent); $this->addInheritedRelations($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); $class->setIdentifier($parent->identifier); $class->setVersioned($parent->isVersioned); $class->setVersionField($parent->versionField); $class->setDiscriminatorMap($parent->discriminatorMap); $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); if (!empty($parent->customGeneratorDefinition)) { $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition); } if ($parent->isMappedSuperclass) { $class->setCustomRepositoryClass($parent->customRepositoryClassName); } } // Invoke driver try { $this->driver->loadMetadataForClass($class->getName(), $class); } catch (ReflectionException $e) { throw MappingException::reflectionFailure($class->getName(), $e); } // If this class has a parent the id generator strategy is inherited. // However this is only true if the hierarchy of parents contains the root entity, // if it consists of mapped superclasses these don't necessarily include the id field. if ($parent && $rootEntityFound) { if ($parent->isIdGeneratorSequence()) { $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition); } else { if ($parent->isIdGeneratorTable()) { $class->tableGeneratorDefinition = $parent->tableGeneratorDefinition; } } if ($parent->generatorType) { $class->setIdGeneratorType($parent->generatorType); } if ($parent->idGenerator) { $class->setIdGenerator($parent->idGenerator); } } else { $this->completeIdGeneratorMapping($class); } if (!$class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; } if (isset($this->embeddablesActiveNesting[$embeddableClass['class']])) { throw MappingException::infiniteEmbeddableNesting($class->name, $property); } $this->embeddablesActiveNesting[$class->name] = true; $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); if ($embeddableMetadata->isEmbeddedClass) { $this->addNestedEmbeddedClasses($embeddableMetadata, $class, $property); } $class->inlineEmbeddable($property, $embeddableMetadata); unset($this->embeddablesActiveNesting[$class->name]); } } if ($parent && $parent->isInheritanceTypeSingleTable()) { $class->setPrimaryTable($parent->table); } if ($parent && $parent->cache) { $class->cache = $parent->cache; } if ($parent && $parent->containsForeignIdentifier) { $class->containsForeignIdentifier = true; } if ($parent && !empty($parent->namedQueries)) { $this->addInheritedNamedQueries($class, $parent); } if ($parent && !empty($parent->namedNativeQueries)) { $this->addInheritedNamedNativeQueries($class, $parent); } if ($parent && !empty($parent->sqlResultSetMappings)) { $this->addInheritedSqlResultSetMappings($class, $parent); } if ($parent && !empty($parent->entityListeners) && empty($class->entityListeners)) { $class->entityListeners = $parent->entityListeners; } $class->setParentClasses($nonSuperclassParents); if ($class->isRootEntity() && !$class->isInheritanceTypeNone() && !$class->discriminatorMap) { $this->addDefaultDiscriminatorMap($class); } if ($this->evm->hasListeners(Events::loadClassMetadata)) { $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } $this->validateRuntimeMetadata($class, $parent); }
/** * Loads the metadata for the specified class into the provided container. * * @param string $className * @param ClassMetadata $metadata */ public function loadMetadataForClass($className, ClassMetadata $metadata) { $this->innerDriver->loadMetadataForClass($className, $metadata); }
/** * {@inheritdoc} */ protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents) { $this->driver->loadMetadataForClass($class->getName(), $class); }