/**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadata $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null)
 {
     $validatorClassMetadata = $this->validatorMetadataFactory->getMetadataFor($classMetadata->getName());
     foreach ($classMetadata->getAttributes() as $attributeMetadata) {
         $attributeName = $attributeMetadata->getName();
         foreach ($validatorClassMetadata->getPropertyMetadata($attributeName) as $propertyMetadata) {
             if (null === $validationGroups) {
                 foreach ($propertyMetadata->findConstraints($validatorClassMetadata->getDefaultGroup()) as $constraint) {
                     if ($this->isRequired($constraint)) {
                         $attributeMetadata->setRequired(true);
                         break 2;
                     }
                 }
             } else {
                 foreach ($validationGroups as $validationGroup) {
                     foreach ($propertyMetadata->findConstraints($validationGroup) as $constraint) {
                         if ($this->isRequired($constraint)) {
                             $attributeMetadata->setRequired(true);
                             break 3;
                         }
                     }
                 }
             }
         }
     }
     return true;
 }
예제 #2
0
 /**
  * {@inheritdoc}
  */
 public function loadClassMetadata(ClassMetadata $classMetadata, array $normalizationGroups = null, array $denormalizationGroups = null, array $validationGroups = null)
 {
     $serializerClassMetadata = $this->serializerClassMetadataFactory ? $this->serializerClassMetadataFactory->getMetadataFor($classMetadata->getName()) : null;
     // Use Serializer metadata if applicable
     if ($serializerClassMetadata && (null !== $normalizationGroups || null !== $denormalizationGroups)) {
         foreach ($serializerClassMetadata->getAttributesMetadata() as $normalizationAttribute) {
             if ('id' === ($name = $normalizationAttribute->getName())) {
                 continue;
             }
             if (null !== $normalizationGroups && count(array_intersect($normalizationAttribute->getGroups(), $normalizationGroups))) {
                 $attribute = $this->getOrCreateAttribute($classMetadata, $name, $normalizationGroups, $denormalizationGroups);
                 $attribute->setReadable(true);
             }
             if (null !== $denormalizationGroups && count(array_intersect($normalizationAttribute->getGroups(), $denormalizationGroups))) {
                 $attribute = $this->getOrCreateAttribute($classMetadata, $name, $normalizationGroups, $denormalizationGroups);
                 $attribute->setWritable(true);
             }
         }
     }
     // Fallback to reflection
     if (null === $normalizationGroups || null === $denormalizationGroups) {
         $reflectionClass = $classMetadata->getReflectionClass();
         // Methods
         foreach ($reflectionClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $reflectionMethod) {
             if ('getId' === $reflectionMethod->name || 'setId' === $reflectionMethod->name) {
                 continue;
             }
             $numberOfRequiredParameters = $reflectionMethod->getNumberOfRequiredParameters();
             // Setters
             if (null === $denormalizationGroups && $numberOfRequiredParameters <= 1 && preg_match('/^(set|add|remove)(.+)$/i', $reflectionMethod->name, $matches)) {
                 $attribute = $this->getOrCreateAttribute($classMetadata, lcfirst($matches[2]), $normalizationGroups, $denormalizationGroups);
                 $attribute->setWritable(true);
                 continue;
             }
             if (0 !== $numberOfRequiredParameters) {
                 continue;
             }
             // Getters and hassers
             if (null === $normalizationGroups && (strpos($reflectionMethod->name, 'get') === 0 || strpos($reflectionMethod->name, 'has') === 0)) {
                 $attribute = $this->getOrCreateAttribute($classMetadata, lcfirst(substr($reflectionMethod->name, 3)), $normalizationGroups, $denormalizationGroups);
                 $attribute->setReadable(true);
                 continue;
             }
             // Issers
             if (null === $normalizationGroups && strpos($reflectionMethod->name, 'is') === 0) {
                 $attribute = $this->getOrCreateAttribute($classMetadata, lcfirst(substr($reflectionMethod->name, 2)), $normalizationGroups, $denormalizationGroups);
                 $attribute->setReadable(true);
             }
         }
         // Properties
         foreach ($reflectionClass->getProperties(\ReflectionProperty::IS_PUBLIC) as $reflectionProperty) {
             if ('id' === $reflectionProperty->name) {
                 continue;
             }
             $attribute = $this->getOrCreateAttribute($classMetadata, $reflectionProperty->name, $normalizationGroups, $denormalizationGroups);
             if (null === $normalizationGroups) {
                 $attribute->setReadable(true);
             }
             if (null === $denormalizationGroups) {
                 $attribute->setWritable(true);
             }
         }
     }
     return true;
 }
 /**
  * @param ClassMetadata $classMetaData
  *
  * @throws \RunTimeException
  */
 private function checkClassMetaData(ClassMetadata $classMetaData)
 {
     if (!$classMetaData->getIdentifier()) {
         throw new \RunTimeException(sprintf('Class "%s" have no identifier.', $classMetaData->getName()));
     }
 }
예제 #4
0
 /**
  * @param ClassMetadata $classMetaData
  *
  * @throws \Exception
  */
 private function checkClassMetaData(ClassMetadata $classMetaData)
 {
     if (($identifier = $classMetaData->getIdentifier()) === null) {
         throw new \Exception(sprintf('Class "%s" have no identifier', $classMetaData->getName()));
     }
 }
예제 #5
0
 public function testName()
 {
     $this->assertEquals('Dunglas\\ApiBundle\\Tests\\Fixtures\\DummyEntity', $this->classMetadata->getName());
 }