/** * {@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; }
/** * {@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())); } }
/** * @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())); } }
public function testName() { $this->assertEquals('Dunglas\\ApiBundle\\Tests\\Fixtures\\DummyEntity', $this->classMetadata->getName()); }