/** * Convert resource object to array. * * @param ResourceObjectInterface $resource * @param array $resourceLinks * @param mixed $meta * @param bool $isShowAttributes * * @return array */ private function convertResourceToArray(ResourceObjectInterface $resource, $resourceLinks, $meta, $isShowAttributes) { $representation = [Document::KEYWORD_TYPE => $resource->getType(), Document::KEYWORD_ID => $resource->getId()]; $attributes = $resource->getAttributes(); // "type" and "id" are reserved keywords and cannot be used as resource object attributes $isOk = isset($attributes[Document::KEYWORD_TYPE]) === false; $isOk ?: Exceptions::throwInvalidArgument('attributes', Document::KEYWORD_TYPE); $isOk = isset($attributes[Document::KEYWORD_ID]) === false; $isOk ?: Exceptions::throwInvalidArgument('attributes', Document::KEYWORD_ID); if ($isShowAttributes === true && empty($attributes) === false) { $representation[Document::KEYWORD_ATTRIBUTES] = $attributes; } // reserve placeholder for relationships, otherwise it would be added after // links and meta which is not visually beautiful $representation[Document::KEYWORD_RELATIONSHIPS] = null; if (empty($resourceLinks) === false) { foreach ($resourceLinks as $linkName => $link) { /** @var LinkInterface $link */ $representation[Document::KEYWORD_LINKS][$linkName] = $this->getLinkRepresentation($this->document->getUrlPrefix(), $link); } } if ($meta !== null) { $representation[Document::KEYWORD_META] = $meta; } return $representation; }
/** * Convert resource object to array. * * @param ResourceObjectInterface $resource * @param bool $isShowSelf * @param mixed $meta * @param bool $isShowAttributes * * @return array */ private function convertResourceToArray(ResourceObjectInterface $resource, $isShowSelf, $meta, $isShowAttributes) { $representation = [Document::KEYWORD_TYPE => $resource->getType(), Document::KEYWORD_ID => $resource->getId()]; $attributes = $resource->getAttributes(); assert('isset($attributes[\'' . Document::KEYWORD_TYPE . '\']) === false && ' . 'isset($attributes[\'' . Document::KEYWORD_ID . '\']) === false', '"type" and "id" are reserved keywords and cannot be used as resource object attributes'); if ($isShowAttributes === true && empty($attributes) === false) { $representation[Document::KEYWORD_ATTRIBUTES] = $attributes; } // reserve placeholder for relationships, otherwise it would be added after // links and meta which is not visually beautiful $representation[Document::KEYWORD_RELATIONSHIPS] = null; if ($isShowSelf === true) { $representation[Document::KEYWORD_LINKS][Document::KEYWORD_SELF] = $this->getLinkRepresentation($this->document->getUrlPrefix(), $resource->getSelfSubLink()); } if ($meta !== null) { $representation[Document::KEYWORD_META] = $meta; } return $representation; }
/** * @inheritdoc */ public function createDocument() { $document = new Document(); $document->setLogger($this->logger); return $document; }