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)); } }
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())); }