Пример #1
0
 /**
  * @param EntityInterface $entity
  * @return \SimpleXMLElement
  * @throws Exception\RuntimeException
  */
 public function extract(EntityInterface $entity)
 {
     $rootElement = $this->metadata->getRootElement();
     $xmlElement = new SimpleXmlElement('<' . $rootElement . '></' . $rootElement . '>');
     foreach ($this->metadata->getProperties() as $property) {
         $value = $entity->{$property->getGetter()}();
         $serializer = $property->getSerializer();
         if ($property->isOneToMany()) {
             $entityMetadata = $property->getTargetEntity();
             $hydrator = new EntityHydrator($entityMetadata);
             foreach ($value as $valueEntity) {
                 $xmlEntry = $hydrator->extract($valueEntity);
                 $serializer($xmlEntry, $xmlElement);
                 if (!$xmlEntry instanceof \SimpleXMLElement) {
                     throw new Exception\RuntimeException("XmlEntry does no SimpleXMLElement type,\n                                                              invalid return type from Hydrator::extract");
                 }
             }
             continue;
         } else {
             $serializer($value, $xmlElement);
         }
     }
     return $xmlElement;
 }
 /**
  * @param EntityInterface $entity
  * @return mixed | object
  */
 public function save(EntityInterface $entity)
 {
     $httpUri = new Http($this->classMetadata->getServicePath());
     $hydrator = new EntityHydrator($this->classMetadata);
     $element = $this->mapper->save($httpUri, $hydrator->extract($entity));
     return $hydrator->hydrate($element, $entity);
 }