コード例 #1
0
 /**
  * {@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;
 }
コード例 #2
0
 /**
  * {@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;
 }
コード例 #3
0
 /**
  * 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;
 }