/** * {@inheritdoc} */ public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null) { $className = $classMetadata->getReflectionClass()->name; $manager = $this->managerRegistry->getManagerForClass($className); if (!$manager) { return $classMetadata; } $doctrineClassMetadata = $manager->getClassMetadata($className); if (!$doctrineClassMetadata) { return $classMetadata; } $identifiers = $doctrineClassMetadata->getIdentifier(); if (1 !== count($identifiers)) { return $classMetadata; } $identifierName = $identifiers[0]; if (!$classMetadata->hasAttributeMetadata($identifierName)) { $attributeMetadata = $this->attributeMetadataFactory->getAttributeMetadataFor($classMetadata, $identifierName, $normalizationGroups, $denormalizationGroups); if ($doctrineClassMetadata->isIdentifierNatural()) { $attributeMetadata = $attributeMetadata->withWritable(false); } $classMetadata = $classMetadata->withAttributeMetadata($identifierName, $attributeMetadata); } $classMetadata = $classMetadata->withIdentifierName($identifierName); return $classMetadata; }
/** * {@inheritdoc} */ public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null) { if (null === $normalizationGroups && null === $denormalizationGroups) { return $classMetadata; } $serializerClassMetadata = $this->serializerClassMetadataFactory->getMetadataFor($classMetadata->getName()); foreach ($serializerClassMetadata->getAttributesMetadata() as $serializerAttributeMetadata) { $attributeName = $serializerAttributeMetadata->getName(); $attributeMetadata = $this->attributeMetadataFactory->getAttributeMetadataFor($classMetadata, $attributeName, $normalizationGroups, $denormalizationGroups); list($classMetadata, $attributeMetadata) = $this->populateAttributeMetadata($classMetadata, $attributeName, $attributeMetadata, $serializerAttributeMetadata, $normalizationGroups, $denormalizationGroups); $classMetadata = $this->populateNormalizationLinks($classMetadata, $attributeName, $attributeMetadata, $normalizationGroups, $denormalizationGroups); } return $classMetadata; }
/** * Populates class metadata from public properties. * * @param \ReflectionClass $reflectionClass * @param ClassMetadataInterface $classMetadata * @param array|null $normalizationGroups * @param array|null $denormalizationGroups * * @return ClassMetadataInterface */ private function populateFromPublicProperties(\ReflectionClass $reflectionClass, ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null) { foreach ($reflectionClass->getProperties(\ReflectionProperty::IS_PUBLIC) as $reflectionProperty) { $attributeName = $reflectionProperty->name; $attributeMetadata = $this->attributeMetadataFactory->getAttributeMetadataFor($classMetadata, $attributeName, $normalizationGroups, $denormalizationGroups); if (null === $normalizationGroups) { $attributeMetadata = $attributeMetadata->withReadable(true); $classMetadata = $this->addAttributeMetadata($classMetadata, $attributeMetadata, $attributeName); } if (null === $denormalizationGroups) { $attributeMetadata = $attributeMetadata->withWritable(true); $classMetadata = $this->addAttributeMetadata($classMetadata, $attributeMetadata, $attributeName); } } return $classMetadata; }