You are here

class FieldDefinitionNormalizer in Schemata 8

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

Normalizer for FieldDefinitionInterface objects.

This normalizes the variant of data fields particular to the Field system. By accessing this via the FieldDefinitionInterface, there is greater access to some of the methods providing deeper schema properties.

Hierarchy

Expanded class hierarchy of FieldDefinitionNormalizer

1 string reference to 'FieldDefinitionNormalizer'
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 FieldDefinitionNormalizer
serializer.normalizer.field_definition.schema_json.jsonapi in schemata_json_schema/schemata_json_schema.services.yml
Drupal\schemata_json_schema\Normalizer\jsonapi\FieldDefinitionNormalizer

File

schemata_json_schema/src/Normalizer/jsonapi/FieldDefinitionNormalizer.php, line 16

Namespace

Drupal\schemata_json_schema\Normalizer\jsonapi
View source
class FieldDefinitionNormalizer extends ListDataDefinitionNormalizer {

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

  /**
   * {@inheritdoc}
   */
  public function normalize($field_definition, $format = NULL, array $context = []) {
    assert($field_definition instanceof FieldDefinitionInterface);
    $cardinality = $field_definition
      ->getFieldStorageDefinition()
      ->getCardinality();
    $context['cardinality'] = $cardinality;
    $normalized = parent::normalize($field_definition, $format, $context);

    // Specify non-contextual default value as an example.
    $default_value = $field_definition
      ->getDefaultValueLiteral();
    $field_name = $context['name'];
    if (!empty($default_value)) {
      $field_type = $field_definition
        ->getType();
      $default_value = $cardinality == 1 ? reset($default_value) : $default_value;
      $default_value = count($default_value) == 1 ? reset($default_value) : $default_value;
      $default_value = $field_type == "boolean" ? boolval($default_value) : $default_value;
      NestedArray::setValue($normalized, [
        'properties',
        'attributes',
        'properties',
        $field_name,
        'default',
      ], $default_value);
    }

    // The cardinality is the configured maximum number of values the field can
    // contain. If unlimited, we do not include a maxItems attribute.
    if ($cardinality != FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED && $cardinality != 1) {
      NestedArray::setValue($normalized, [
        'properties',
        'attributes',
        'properties',
        $field_name,
        'maxItems',
      ], $cardinality);
    }
    return $normalized;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY constant Name of key for bubbling cacheability metadata via serialization context.
DataDefinitionNormalizer::$describedFormat protected property The formats that the Normalizer can handle. Overrides JsonNormalizerBase::$describedFormat
DataDefinitionNormalizer::$format protected property The formats that the Normalizer can handle. Overrides JsonNormalizerBase::$format
DataDefinitionNormalizer::extractPropertyData protected function Extracts property details from a data definition.
FieldDefinitionNormalizer::$supportedInterfaceOrClass protected property The interface or class that this Normalizer supports. Overrides ListDataDefinitionNormalizer::$supportedInterfaceOrClass
FieldDefinitionNormalizer::normalize public function Normalizes an object into a set of arrays/scalars. Overrides ListDataDefinitionNormalizer::normalize
ListDataDefinitionNormalizer::isReferenceField protected function Determine if the current field is a reference field.
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