/** * Load metadata class * * @param \ReflectionClass $class * @return ClassMetadata */ public function loadMetadataForClass(\ReflectionClass $class) { $classMetadata = new ClassMetadata($class->name); $classMetadata->fileResources[] = $class->getFileName(); foreach ($this->reader->getClassAnnotations($class) as $annotation) { if ($annotation instanceof NamespaceNode) { $classMetadata->addGraphNamespace($annotation); } if ($annotation instanceof GraphNode) { $classMetadata->addGraphMetadata($annotation, new MetadataValue($annotation->value)); } } foreach ($class->getProperties() as $property) { foreach ($this->reader->getPropertyAnnotations($property) as $annotation) { if ($annotation instanceof GraphNode) { $classMetadata->addGraphMetadata($annotation, new PropertyMetadata($class->name, $property->name)); } } } foreach ($class->getMethods() as $method) { foreach ($this->reader->getMethodAnnotations($method) as $annotation) { if ($annotation instanceof GraphNode) { $classMetadata->addGraphMetadata($annotation, new MethodMetadata($class->name, $method->name)); } } } return $classMetadata; }
/** * Parse OpenGraph node properties * * @param \ReflectionClass $class * @param ClassMetadata $metadata * @param mixed $config */ protected function parseNodes(\ReflectionClass $class, ClassMetadata $metadata, $config) { if (!isset($config['nodes'])) { return; } if (!is_array($config)) { throw new \RuntimeException(sprintf('Invalid YAML configuration for "%s" : "properties" property need to be an array.', $metadata->name)); } foreach ($config['nodes'] as $property => $nodeProperties) { foreach ($nodeProperties as $nodeProperty) { if (!isset($nodeProperty['namespace']) || !isset($nodeProperty['tag'])) { throw new \RuntimeException(sprintf('Invalid YAML configuration for "%s" : "namespace" and "tag" are required.', $metadata->name)); } $node = new Node(['namespace' => $nodeProperty['namespace'], 'tag' => $nodeProperty['tag']]); if ($class->hasProperty($property)) { $metadata->addGraphMetadata($node, new PropertyMetadata($class->name, $property)); } if ($class->hasMethod($property)) { $metadata->addGraphMetadata($node, new MethodMetadata($class->name, $property)); } } } }