You are here

public function SchemataSchemaNormalizer::normalize in Schemata 8

Same name in this branch
  1. 8 schemata_json_schema/src/Normalizer/jsonapi/SchemataSchemaNormalizer.php \Drupal\schemata_json_schema\Normalizer\jsonapi\SchemataSchemaNormalizer::normalize()
  2. 8 schemata_json_schema/src/Normalizer/json/SchemataSchemaNormalizer.php \Drupal\schemata_json_schema\Normalizer\json\SchemataSchemaNormalizer::normalize()
  3. 8 schemata_json_schema/src/Normalizer/hal/SchemataSchemaNormalizer.php \Drupal\schemata_json_schema\Normalizer\hal\SchemataSchemaNormalizer::normalize()

Overrides SchemataSchemaNormalizer::normalize

File

schemata_json_schema/src/Normalizer/hal/SchemataSchemaNormalizer.php, line 35

Class

SchemataSchemaNormalizer
Extends the base SchemataSchema normalizer for JSON with HAL+JSON elements.

Namespace

Drupal\schemata_json_schema\Normalizer\hal

Code

public function normalize($entity, $format = NULL, array $context = []) {

  // Create the array of normalized fields, starting with the URI.

  /* @var $entity \Drupal\schemata\Schema\SchemaInterface */
  $normalized = parent::normalize($entity, $format, $context);

  // HAL link schema definitions based on HyperSchema.org.
  // @see http://hyperschema.org/mediatypes/hal
  $items = [];
  if (!empty($normalized['properties']['_links'])) {
    $items = $normalized['properties']['_links'];
  }
  $items['self'] = [
    '$ref' => '#/definitions/linkObject',
  ];
  $items['type'] = [
    '$ref' => '#/definitions/linkObject',
  ];
  $normalized['properties']['_links'] = [
    'title' => 'HAL Links',
    'description' => 'Object of links with the rels as the keys',
    'type' => 'object',
    'properties' => $items,
  ];
  if (!empty($normalized['properties']['_embedded'])) {
    $items = $normalized['properties']['_embedded'];
    $normalized['properties']['_embedded'] = [
      'title' => 'HAL Embedded Resource',
      'description' => 'An embedded HAL resource',
      'type' => 'object',
      'properties' => $items,
    ];
  }
  $normalized['definitions']['linkArray'] = [
    'title' => 'HAL Link Array',
    'description' => 'An array of linkObjects of the same link relation',
    'type' => 'array',
    'items' => [
      '$ref' => '#/definitions/linkObject',
    ],
  ];

  // Drupal core does not currently use several HAL link attributes.
  // If they are added entries should be added here.
  $normalized['definitions']['linkObject'] = [
    'title' => 'HAL Link Object',
    'description' => 'An object with link information.',
    'type' => 'object',
    'properties' => [
      'name' => [
        'title' => 'Name',
        'description' => 'Name of a resource, link, action, etc.',
        'type' => 'string',
      ],
      'title' => [
        'title' => 'Title',
        'description' => 'A title for a resource, link, action, etc.',
        'type' => 'string',
      ],
      'href' => [
        'title' => 'HREF',
        'description' => 'A hyperlink URL.',
        'type' => 'string',
        'format' => 'uri',
      ],
    ],
    'required' => [
      'href',
    ],
  ];
  return $normalized;
}