public function ClassMetadataFactory::getMetadataFor in Zircon Profile 8
Same name in this branch
- 8 vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactory.php \Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory::getMetadataFor()
- 8 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadataFactory.php \Doctrine\Common\Persistence\Mapping\ClassMetadataFactory::getMetadataFor()
Same name and namespace in other branches
- 8.0 vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactory.php \Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory::getMetadataFor()
If the method was called with the same class name (or an object of that class) before, the same metadata instance is returned.
If the factory was configured with a cache, this method will first look for an existing metadata instance in the cache. If an existing instance is found, it will be returned without further ado.
Otherwise, a new metadata instance is created. If the factory was configured with a loader, the metadata is passed to the {@link \Symfony\Component\Serializer\Mapping\Loader\LoaderInterface::loadClassMetadata()} method for further configuration. At last, the new object is returned.
Parameters
string|object $value:
Return value
ClassMetadataInterface
Throws
Overrides ClassMetadataFactoryInterface::getMetadataFor
File
- vendor/
symfony/ serializer/ Mapping/ Factory/ ClassMetadataFactory.php, line 52
Class
- ClassMetadataFactory
- Returns a {@link ClassMetadata}.
Namespace
Symfony\Component\Serializer\Mapping\FactoryCode
public function getMetadataFor($value) {
$class = $this
->getClass($value);
if (!$class) {
throw new InvalidArgumentException(sprintf('Cannot create metadata for non-objects. Got: "%s"', gettype($value)));
}
if (isset($this->loadedClasses[$class])) {
return $this->loadedClasses[$class];
}
if ($this->cache && ($this->loadedClasses[$class] = $this->cache
->fetch($class))) {
return $this->loadedClasses[$class];
}
if (!class_exists($class) && !interface_exists($class)) {
throw new InvalidArgumentException(sprintf('The class or interface "%s" does not exist.', $class));
}
$classMetadata = new ClassMetadata($class);
$this->loader
->loadClassMetadata($classMetadata);
$reflectionClass = $classMetadata
->getReflectionClass();
// Include metadata from the parent class
if ($parent = $reflectionClass
->getParentClass()) {
$classMetadata
->merge($this
->getMetadataFor($parent->name));
}
// Include metadata from all implemented interfaces
foreach ($reflectionClass
->getInterfaces() as $interface) {
$classMetadata
->merge($this
->getMetadataFor($interface->name));
}
if ($this->cache) {
$this->cache
->save($class, $classMetadata);
}
return $this->loadedClasses[$class] = $classMetadata;
}