/** * @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; }