You are here

class ListDataDefinitionNormalizer in Schemata 8

Same name in this branch
  1. 8 schemata_json_schema/src/Normalizer/jsonapi/ListDataDefinitionNormalizer.php \Drupal\schemata_json_schema\Normalizer\jsonapi\ListDataDefinitionNormalizer
  2. 8 schemata_json_schema/src/Normalizer/json/ListDataDefinitionNormalizer.php \Drupal\schemata_json_schema\Normalizer\json\ListDataDefinitionNormalizer
  3. 8 schemata_json_schema/src/Normalizer/hal/ListDataDefinitionNormalizer.php \Drupal\schemata_json_schema\Normalizer\hal\ListDataDefinitionNormalizer

Normalizer for ListDataDefinitionInterface objects.

Almost all entity properties in the system are a list of values, each value in the "List" might be a ComplexDataDefinitionInterface (an object) or it might be more of a scalar.

Hierarchy

Expanded class hierarchy of ListDataDefinitionNormalizer

1 file declares its use of ListDataDefinitionNormalizer
ListDataDefinitionNormalizer.php in schemata_json_schema/src/Normalizer/hal/ListDataDefinitionNormalizer.php
1 string reference to 'ListDataDefinitionNormalizer'
schemata_json_schema.services.yml in schemata_json_schema/schemata_json_schema.services.yml
schemata_json_schema/schemata_json_schema.services.yml
1 service uses ListDataDefinitionNormalizer
serializer.normalizer.list_data_definition.schema_json.json in schemata_json_schema/schemata_json_schema.services.yml
Drupal\schemata_json_schema\Normalizer\json\ListDataDefinitionNormalizer

File

schemata_json_schema/src/Normalizer/json/ListDataDefinitionNormalizer.php, line 16

Namespace

Drupal\schemata_json_schema\Normalizer\json
View source
class ListDataDefinitionNormalizer extends DataDefinitionNormalizer {

  /**
   * The interface or class that this Normalizer supports.
   *
   * @var string
   */
  protected $supportedInterfaceOrClass = ListDataDefinitionInterface::class;

  /**
   * {@inheritdoc}
   */
  public function normalize($entity, $format = NULL, array $context = []) {

    /* @var $entity \Drupal\Core\TypedData\ListDataDefinitionInterface */
    $context['parent'] = $entity;
    $property = $this
      ->extractPropertyData($entity, $context);
    $property['type'] = 'array';

    // This retrieves the definition common to ever item in the list, and
    // serializes it so we can define how members of the array should look.
    // There are no lists that might contain items of different types.
    $property['items'] = $this->serializer
      ->normalize($entity
      ->getItemDefinition(), $format, $context);

    // FieldDefinitionInterface::isRequired() explicitly indicates there must be
    // at least one item in the list. Extending this reasoning, the same must be
    // true of all ListDataDefinitions.
    if ($this
      ->requiredProperty($entity)) {
      $property['minItems'] = 1;
    }
    $normalized = [
      'properties' => [],
    ];
    $normalized['properties'][$context['name']] = $property;
    if ($this
      ->requiredProperty($entity)) {
      $normalized['required'][] = $context['name'];
    }
    return $normalized;
  }

  /**
   * Determine if the current field is a reference field.
   *
   * @param \Drupal\Core\TypedData\ListDataDefinitionInterface $entity
   *   The list definition to be checked.
   *
   * @return bool
   *   TRUE if it is a reference, FALSE otherwise.
   */
  protected function isReferenceField(ListDataDefinitionInterface $entity) {
    $item = $entity
      ->getItemDefinition();
    if ($item instanceof ComplexDataDefinitionInterface) {
      $main = $item
        ->getPropertyDefinition($item
        ->getMainPropertyName());

      // @todo use an interface or API call instead of an object check.
      return $main instanceof DataReferenceTargetDefinition;
    }
    return FALSE;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY constant Name of key for bubbling cacheability metadata via serialization context.
DataDefinitionNormalizer::extractPropertyData protected function Extracts property details from a data definition.
JsonNormalizerBase::$describedFormat protected property The formats that the Normalizer can handle. 7
JsonNormalizerBase::$format protected property The formats that the Normalizer can handle. Overrides NormalizerBase::$format 7
ListDataDefinitionNormalizer::$supportedInterfaceOrClass protected property The interface or class that this Normalizer supports. Overrides DataDefinitionNormalizer::$supportedInterfaceOrClass
ListDataDefinitionNormalizer::isReferenceField protected function Determine if the current field is a reference field.
ListDataDefinitionNormalizer::normalize public function Normalizes an object into a set of arrays/scalars. Overrides DataDefinitionNormalizer::normalize
NormalizerBase::addCacheableDependency protected function Adds cacheability if applicable.
NormalizerBase::checkFormat protected function Checks if the provided format is supported by this normalizer. Overrides NormalizerBase::checkFormat
NormalizerBase::denormalize public function Denormalizes data back into an object of the given class.
NormalizerBase::normalizeProperties protected function Normalize an array of data definitions.
NormalizerBase::requiredProperty protected function Determine if the given property is a required element of the schema.
NormalizerBase::supportsDenormalization public function Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::supportsDenormalization() Overrides NormalizerBase::supportsDenormalization
NormalizerBase::supportsNormalization public function Checks whether the given class is supported for normalization by this normalizer. 1