Exemplo n.º 1
0
 public function onPostSerialize(ObjectEvent $event)
 {
     $metadata = $this->reader->read($event->getObject());
     /** @var XmlSerializationVisitor $visitor */
     $visitor = $event->getVisitor();
     $object = $event->getObject();
     $accessor = PropertyAccess::createPropertyAccessor();
     if ($metadata->getLinks()) {
         foreach ($metadata->getLinks() as $link) {
             $child = $accessor->getValue($event->getObject(), $link->getProperty());
             if (!is_object($child)) {
                 continue;
             }
             $visitor->getCurrentNode()->appendChild($this->createLinkNode($link, $visitor, $object));
             if ($link->getEmbed()) {
                 $entryNode = $visitor->getDocument()->createElement($link->getName());
                 $visitor->getCurrentNode()->appendChild($entryNode);
                 $visitor->setCurrentNode($entryNode);
                 $visitor->getCurrentNode()->setAttribute('rel', $link->getEntity());
                 foreach (array('id', 'name', 'slug') as $property) {
                     if ($accessor->isReadable($child, $property)) {
                         $childNode = $visitor->getDocument()->createElement($property);
                         $valueNode = $visitor->getDocument()->createTextNode($accessor->getValue($child, $property));
                         $visitor->getCurrentNode()->appendChild($childNode);
                         $visitor->setCurrentNode($childNode);
                         $visitor->getCurrentNode()->appendChild($valueNode);
                         $visitor->revertCurrentNode();
                     }
                 }
                 $visitor->revertCurrentNode();
             }
         }
     }
     if ($metadata->getSelfLink()) {
         $visitor->getCurrentNode()->appendChild($this->createLinkNode($metadata->getSelfLink(), $visitor, $object));
     }
 }
Exemplo n.º 2
0
 public function onPostSerialize(ObjectEvent $event)
 {
     $metadata = $this->reader->read($event->getObject());
     /** @var JsonSerializationVisitor $visitor */
     $visitor = $event->getVisitor();
     $object = $event->getObject();
     $linkJson = array();
     $accessor = PropertyAccess::createPropertyAccessor();
     if ($metadata->getSelfLink()) {
         $linkJson['self'] = $this->createLinkUrl($metadata->getSelfLink(), $object);
     }
     if ($metadata->getLinks()) {
         foreach ($metadata->getLinks() as $link) {
             $child = $accessor->getValue($event->getObject(), $link->getProperty());
             if ($child === null) {
                 continue;
             }
             $linkJson[$link->getName()] = $this->createLinkUrl($link, $object);
             if ($link->getEmbed()) {
                 $childData = array();
                 foreach (array('id', 'name', 'slug') as $property) {
                     if ($accessor->isReadable($child, $property)) {
                         $childData[$property] = $accessor->getValue($child, $property);
                     }
                 }
                 $childData['_type'] = $link->getEntity();
                 $visitor->addData($link->getName(), $childData);
             }
         }
     }
     if (count($linkJson) > 0) {
         $visitor->addData('_links', $linkJson);
     }
     $class = new \ReflectionClass($object);
     $visitor->addData('_type', strtolower($class->getShortName()));
 }