/** * {@inheritDoc} */ public function loadMetadataForClass($className) { $class = new ReflectionClass($className); $classAnnotations = $this->reader->getClassAnnotations($class); if ($classAnnotations) { foreach ($classAnnotations as $key => $annot) { if (!is_numeric($key)) { continue; } $classAnnotations[get_class($annot)] = $annot; } } if (!isset($classAnnotations['ML\\HydraBundle\\Mapping\\Expose'])) { return null; } $annotation = $classAnnotations['ML\\HydraBundle\\Mapping\\Expose']; $metadata = new ClassMetadata($className); $metadata->setExposeAs($annotation->as); $metadata->setIri($annotation->getIri()); $this->documentRouteAndOperations($metadata, $class); $this->documentProperties($metadata, $class); // If this class represents an external definition, we don't need to // collect all data; just the one necessary for the serializer if ($metadata->isExternalReference()) { return $metadata; } $docu = $this->getDocBlockText($class); $metadata->setTitle($docu['title']); $metadata->setDescription($docu['description']); return $metadata; }
/** * Completes the metadata by setting missing fields that can be inferred * by other fields * * Furthermore, the type of properties which is returned as string by * the metadata driver is replaced with a ClassMetadata instance. * * @param ClassMetadata $class The metadata to complete */ protected function completeMetadata(ClassMetadata $class) { $className = $class->getName(); if (null === $class->getIri()) { $class->setIri($this->namingStrategy->classIriFragment($className)); } if (null === $class->getExposeAs()) { $class->setExposeAs($this->namingStrategy->classShortName($className)); } // If no title has been set for this class, use it's short name if (null === $class->getTitle()) { $class->setTitle($this->namingStrategy->classShortName($className)); } foreach ($class->getProperties() as $property) { $propertyName = $property->getName(); if (null === $property->getIri()) { $property->setIri($this->namingStrategy->propertyIriFragment($className, $propertyName)); } if (null === $property->getExposeAs()) { $property->setExposeAs($this->namingStrategy->propertyShortName($className, $propertyName)); } // If no title has been set for this property, use it's short name if (null === $property->getTitle()) { $property->setTitle($this->namingStrategy->propertyShortName($className, $propertyName)); } } }