Exemplo n.º 1
0
 /**
  * @param EmbeddedMetadataInterface $embeddedMetadata
  *
  * @return EmbeddedMetadataInterface
  */
 private function addNestedEmbeddedClasses(EmbeddedMetadataInterface $embeddedMetadata)
 {
     $reflClass = new \ReflectionClass($embeddedMetadata->getClassAttribute());
     foreach ($reflClass->getProperties() as $reflProperty) {
         if ($annotation = $this->reader->getPropertyAnnotation($reflProperty, Index::class)) {
             $embeddedMetadata->addEmbeddableClass(new IndexMetadata($reflProperty->class, $reflProperty->name, $annotation->name, $annotation->type));
         }
         if ($annotation = $this->reader->getPropertyAnnotation($reflProperty, Embedded::class)) {
             $nested = $this->addNestedEmbeddedClasses(new EmbeddedMetadata($reflProperty->class, $reflProperty->name, $annotation->class));
             $embeddedMetadata->addEmbeddableClass($nested);
         }
     }
     return $embeddedMetadata;
 }
Exemplo n.º 2
0
 /**
  * @param EmbeddedMetadataInterface $embeddedMetadata
  * @param array                     $data
  *
  * @return object
  */
 private function getEmbeddedObject(EmbeddedMetadataInterface $embeddedMetadata, array $data)
 {
     $embedded = $this->instantiator->instantiate($embeddedMetadata->getClassAttribute());
     foreach ($embeddedMetadata->getEmbeddableClasses() as $embeddableMetadata) {
         if ($embeddableMetadata instanceof IndexMetadataInterface) {
             $name = $embeddableMetadata->getNameAttribute();
             $type = $embeddableMetadata->getTypeAttribute();
             $value = Type::getType($type)->convertToPHPValue($this->get($data, $name));
             $embeddableMetadata->setValue($embedded, $value);
         }
         if ($embeddableMetadata instanceof EmbeddedMetadataInterface) {
             $object = $this->getEmbeddedObject($embeddableMetadata, $this->get($data, $embeddableMetadata->getPropertyName(), []));
             $embeddableMetadata->setValue($embedded, $object);
         }
     }
     return $embedded;
 }