annotate core/modules/jsonapi/src/JsonApiResource/JsonApiDocumentTopLevel.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
rev   line source
Chris@5 1 <?php
Chris@5 2
Chris@5 3 namespace Drupal\jsonapi\JsonApiResource;
Chris@5 4
Chris@5 5 use Drupal\Core\Field\EntityReferenceFieldItemListInterface;
Chris@5 6
Chris@5 7 /**
Chris@5 8 * Represents a JSON:API document's "top level".
Chris@5 9 *
Chris@5 10 * @internal JSON:API maintains no PHP API. The API is the HTTP API. This class
Chris@5 11 * may change at any time and could break any dependencies on it.
Chris@5 12 *
Chris@5 13 * @see https://www.drupal.org/project/jsonapi/issues/3032787
Chris@5 14 * @see jsonapi.api.php
Chris@5 15 *
Chris@5 16 * @see http://jsonapi.org/format/#document-top-level
Chris@5 17 *
Chris@5 18 * @todo Add support for the missing optional 'jsonapi' member or document why not.
Chris@5 19 */
Chris@5 20 class JsonApiDocumentTopLevel {
Chris@5 21
Chris@5 22 /**
Chris@5 23 * The data to normalize.
Chris@5 24 *
Chris@5 25 * @var \Drupal\jsonapi\JsonApiResource\ResourceIdentifierInterface|\Drupal\jsonapi\JsonApiResource\Data|\Drupal\jsonapi\JsonApiResource\ErrorCollection|\Drupal\Core\Field\EntityReferenceFieldItemListInterface
Chris@5 26 */
Chris@5 27 protected $data;
Chris@5 28
Chris@5 29 /**
Chris@5 30 * The metadata to normalize.
Chris@5 31 *
Chris@5 32 * @var array
Chris@5 33 */
Chris@5 34 protected $meta;
Chris@5 35
Chris@5 36 /**
Chris@5 37 * The links.
Chris@5 38 *
Chris@5 39 * @var \Drupal\jsonapi\JsonApiResource\LinkCollection
Chris@5 40 */
Chris@5 41 protected $links;
Chris@5 42
Chris@5 43 /**
Chris@5 44 * The includes to normalize.
Chris@5 45 *
Chris@5 46 * @var \Drupal\jsonapi\JsonApiResource\IncludedData
Chris@5 47 */
Chris@5 48 protected $includes;
Chris@5 49
Chris@5 50 /**
Chris@5 51 * Resource objects that will be omitted from the response for access reasons.
Chris@5 52 *
Chris@5 53 * @var \Drupal\jsonapi\JsonApiResource\OmittedData
Chris@5 54 */
Chris@5 55 protected $omissions;
Chris@5 56
Chris@5 57 /**
Chris@5 58 * Instantiates a JsonApiDocumentTopLevel object.
Chris@5 59 *
Chris@5 60 * @param \Drupal\jsonapi\JsonApiResource\ResourceIdentifierInterface|\Drupal\jsonapi\JsonApiResource\Data|\Drupal\jsonapi\JsonApiResource\ErrorCollection|\Drupal\Core\Field\EntityReferenceFieldItemListInterface $data
Chris@5 61 * The data to normalize. It can be either a ResourceObject, or a stand-in
Chris@5 62 * for one, or a collection of the same.
Chris@5 63 * @param \Drupal\jsonapi\JsonApiResource\IncludedData $includes
Chris@5 64 * A JSON:API Data object containing resources to be included in the
Chris@5 65 * response document or NULL if there should not be includes.
Chris@5 66 * @param \Drupal\jsonapi\JsonApiResource\LinkCollection $links
Chris@5 67 * A collection of links to resources related to the top-level document.
Chris@5 68 * @param array $meta
Chris@5 69 * (optional) The metadata to normalize.
Chris@5 70 */
Chris@5 71 public function __construct($data, IncludedData $includes, LinkCollection $links, array $meta = []) {
Chris@5 72 assert($data instanceof ResourceIdentifierInterface || $data instanceof Data || $data instanceof ErrorCollection || $data instanceof EntityReferenceFieldItemListInterface);
Chris@5 73 assert(!$data instanceof ErrorCollection || $includes instanceof NullIncludedData);
Chris@5 74 $this->data = $data instanceof ResourceObjectData ? $data->getAccessible() : $data;
Chris@5 75 $this->includes = $includes->getAccessible();
Chris@5 76 $this->links = $links->withContext($this);
Chris@5 77 $this->meta = $meta;
Chris@5 78 $this->omissions = $data instanceof ResourceObjectData
Chris@5 79 ? OmittedData::merge($data->getOmissions(), $includes->getOmissions())
Chris@5 80 : $includes->getOmissions();
Chris@5 81 }
Chris@5 82
Chris@5 83 /**
Chris@5 84 * Gets the data.
Chris@5 85 *
Chris@5 86 * @return \Drupal\jsonapi\JsonApiResource\ResourceObject|\Drupal\jsonapi\JsonApiResource\Data|\Drupal\jsonapi\JsonApiResource\LabelOnlyResourceObject|\Drupal\jsonapi\JsonApiResource\ErrorCollection
Chris@5 87 * The data.
Chris@5 88 */
Chris@5 89 public function getData() {
Chris@5 90 return $this->data;
Chris@5 91 }
Chris@5 92
Chris@5 93 /**
Chris@5 94 * Gets the links.
Chris@5 95 *
Chris@5 96 * @return \Drupal\jsonapi\JsonApiResource\LinkCollection
Chris@5 97 * The top-level links.
Chris@5 98 */
Chris@5 99 public function getLinks() {
Chris@5 100 return $this->links;
Chris@5 101 }
Chris@5 102
Chris@5 103 /**
Chris@5 104 * Gets the metadata.
Chris@5 105 *
Chris@5 106 * @return array
Chris@5 107 * The metadata.
Chris@5 108 */
Chris@5 109 public function getMeta() {
Chris@5 110 return $this->meta;
Chris@5 111 }
Chris@5 112
Chris@5 113 /**
Chris@5 114 * Gets a JSON:API Data object of resources to be included in the response.
Chris@5 115 *
Chris@5 116 * @return \Drupal\jsonapi\JsonApiResource\IncludedData
Chris@5 117 * The includes.
Chris@5 118 */
Chris@5 119 public function getIncludes() {
Chris@5 120 return $this->includes;
Chris@5 121 }
Chris@5 122
Chris@5 123 /**
Chris@5 124 * Gets an OmittedData instance containing resources to be omitted.
Chris@5 125 *
Chris@5 126 * @return \Drupal\jsonapi\JsonApiResource\OmittedData
Chris@5 127 * The omissions.
Chris@5 128 */
Chris@5 129 public function getOmissions() {
Chris@5 130 return $this->omissions;
Chris@5 131 }
Chris@5 132
Chris@5 133 }