function FieldNormalizer::getNormalizationSchema

Same name and namespace in other branches
  1. 11.x core/modules/jsonapi/src/Normalizer/FieldNormalizer.php \Drupal\jsonapi\Normalizer\FieldNormalizer::getNormalizationSchema()

Overrides SchematicNormalizerTrait::getNormalizationSchema

File

core/modules/jsonapi/src/Normalizer/FieldNormalizer.php, line 100

Class

FieldNormalizer
Converts the Drupal field structure to a JSON:API array structure.

Namespace

Drupal\jsonapi\Normalizer

Code

protected function getNormalizationSchema(mixed $object, array $context = []) : array {
  assert($object instanceof FieldItemListInterface);
  // Some aspects of the schema are determined by the field config.
  $cardinality = $object->getFieldDefinition()
    ->getFieldStorageDefinition()
    ->getCardinality();
  $schema = [];
  // Normalizers are resolved by the class/object being normalized. Even
  // without data, we must retrieve a representative field item.
  $field_item = $object->appendItem($object->generateSampleItems());
  assert($this->serializer instanceof JsonSchemaProviderSerializerInterface);
  $item_schema = $this->serializer
    ->getJsonSchema($field_item, $context);
  $object->removeItem(count($object) - 1);
  unset($field_item);
  $schema = $item_schema;
  if ($cardinality !== 1) {
    $schema['type'] = 'array';
    if ($object->getFieldDefinition()
      ->isRequired()) {
      $schema['minItems'] = 1;
    }
    if ($cardinality !== FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) {
      $schema['maxItems'] = $cardinality;
    }
    if (!empty($item_schema)) {
      $schema['items'] = $item_schema;
    }
  }
  return !$object->getFieldDefinition()
    ->isRequired() ? [
    'oneOf' => [
      $schema,
      [
        'type' => 'null',
      ],
    ],
  ] : $schema;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.