/** * {@inheritdoc} */ public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null) { $validatorClassMetadata = $this->validatorMetadataFactory->getMetadataFor($classMetadata->getName()); foreach ($classMetadata->getAttributesMetadata() as $attributeName => $attributeMetadata) { foreach ($validatorClassMetadata->getPropertyMetadata($attributeName) as $propertyMetadata) { if (null === $validationGroups) { foreach ($propertyMetadata->findConstraints($validatorClassMetadata->getDefaultGroup()) as $constraint) { if ($this->isRequired($constraint)) { $attributeMetadata = $attributeMetadata->withRequired(true); break 2; } } } else { foreach ($validationGroups as $validationGroup) { if (!is_string($validationGroup)) { continue; } foreach ($propertyMetadata->findConstraints($validationGroup) as $constraint) { if ($this->isRequired($constraint)) { $attributeMetadata = $attributeMetadata->withRequired(true); break 3; } } } } } $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata); } return $classMetadata; }
public function getAttributeMetadataFor(ClassMetadataInterface $classMetadata, $attributeName, array $normalizationGroups = null, array $denormalizationGroups = null) { if ($classMetadata->hasAttributeMetadata($attributeName)) { return $classMetadata->getAttributeMetadata($attributeName); } $attributeMetadata = new AttributeMetadata(); $reflectionProperty = $this->getReflectionProperty($classMetadata->getReflectionClass(), $attributeName); if (!$reflectionProperty) { return $attributeMetadata; } $types = $this->propertyInfo->getTypes($reflectionProperty); if (!isset($types[0])) { return $attributeMetadata; } $type = $types[0]; $attributeMetadata = $attributeMetadata->withType($type); $class = $type->getClass(); $link = $this->resourceCollection->getResourceForEntity($class) || $type->isCollection() && $type->getCollectionType() && ($class = $type->getCollectionType()->getClass()) && $this->resourceCollection->getResourceForEntity($class); $attributeMetadata = $attributeMetadata->withLink($link)->withLinkClass($class); if (!$link) { return $attributeMetadata; } if (null === $normalizationGroups) { $attributeMetadata = $attributeMetadata->withNormalizationLink(true); } if (null === $denormalizationGroups) { $attributeMetadata = $attributeMetadata->withDenormalizationLink(true); } return $attributeMetadata; }
/** * {@inheritdoc} */ public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null) { if (null !== $normalizationGroups && null !== $denormalizationGroups) { return $classMetadata; } $reflectionClass = $classMetadata->getReflectionClass(); $classMetadata = $this->populateFromPublicMethods($reflectionClass, $classMetadata, $normalizationGroups, $denormalizationGroups); $classMetadata = $this->populateFromPublicProperties($reflectionClass, $classMetadata, $normalizationGroups, $denormalizationGroups); return $classMetadata; }
/** * {@inheritdoc} */ public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null) { if (($classReflector = $this->getClassReflector($classMetadata->getReflectionClass())) && ($docBlock = $classReflector->getDocBlock())) { $classMetadata = $classMetadata->withDescription($docBlock->getShortDescription()); } foreach ($classMetadata->getAttributesMetadata() as $attributeName => $attributeMetadata) { if ($reflectionProperty = $this->getReflectionProperty($classMetadata->getReflectionClass(), $attributeName)) { $attributeMetadata = $attributeMetadata->withDescription($this->propertyInfo->getShortDescription($reflectionProperty)); $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata); } } return $classMetadata; }
/** * {@inheritdoc} */ public function loadClassMetadata(ClassMetadataInterface $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null) { $reflectionClass = $classMetadata->getReflectionClass(); if ($iri = $this->reader->getClassAnnotation($reflectionClass, self::IRI_ANNOTATION_NAME)) { $classMetadata = $classMetadata->withIri($iri->value); } foreach ($classMetadata->getAttributesMetadata() as $attributeName => $attributeMetadata) { if ($reflectionProperty = $this->getReflectionProperty($reflectionClass, $attributeName)) { if ($iri = $this->reader->getPropertyAnnotation($reflectionProperty, self::IRI_ANNOTATION_NAME)) { $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata->withIri($iri->value)); } } } return $classMetadata; }
/** * {@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; }
/** * Populates normalization and denormalization links. * * @param ClassMetadataInterface $classMetadata * @param string $attributeName * @param AttributeMetadataInterface $attributeMetadata * @param array|null $normalizationGroups * @param array|null $denormalizationGroups * * @return ClassMetadataInterface */ private function populateNormalizationLinks(ClassMetadataInterface $classMetadata, $attributeName, AttributeMetadataInterface $attributeMetadata, array $normalizationGroups = null, array $denormalizationGroups = null) { if (!$classMetadata->hasAttributeMetadata($attributeName) || !$attributeMetadata->isLink() || $attributeMetadata->isNormalizationLink() && $attributeMetadata->isDenormalizationLink()) { return $classMetadata; } $relationSerializerMetadata = $this->serializerClassMetadataFactory->getMetadataFor($attributeMetadata->getLinkClass()); if (!$relationSerializerMetadata) { $attributeMetadata = $attributeMetadata->withNormalizationLink(true)->withDenormalizationLink(true); return $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata); } foreach ($relationSerializerMetadata->getAttributesMetadata() as $serializerAttributeMetadata) { $serializerAttributeGroups = $serializerAttributeMetadata->getGroups(); if (null !== $normalizationGroups && 1 <= count(array_intersect($normalizationGroups, $serializerAttributeGroups))) { $normalizationLink = false; } if (null !== $denormalizationGroups && 1 <= count(array_intersect($denormalizationGroups, $serializerAttributeGroups))) { $denormalizationLink = false; } if (isset($normalizationLink) && isset($denormalizationLink)) { $classMetadata = $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata); } } if (!isset($normalizationLink)) { $attributeMetadata = $attributeMetadata->withNormalizationLink(true); } if (!isset($denormalizationLink)) { $attributeMetadata = $attributeMetadata->withDenormalizationLink(true); } return $classMetadata->withAttributeMetadata($attributeName, $attributeMetadata); }