class TypedDataNormalizer

Same name and namespace in other branches
  1. 10 core/modules/serialization/src/Normalizer/TypedDataNormalizer.php \Drupal\serialization\Normalizer\TypedDataNormalizer
  2. 9 core/modules/serialization/src/Normalizer/TypedDataNormalizer.php \Drupal\serialization\Normalizer\TypedDataNormalizer
  3. 8.9.x core/modules/serialization/src/Normalizer/TypedDataNormalizer.php \Drupal\serialization\Normalizer\TypedDataNormalizer

Normalizes typed data objects into strings or arrays.

Hierarchy

Expanded class hierarchy of TypedDataNormalizer

1 file declares its use of TypedDataNormalizer
TypedDataNormalizerTest.php in core/modules/serialization/tests/src/Unit/Normalizer/TypedDataNormalizerTest.php
1 string reference to 'TypedDataNormalizer'
serialization.services.yml in core/modules/serialization/serialization.services.yml
core/modules/serialization/serialization.services.yml
1 service uses TypedDataNormalizer
serializer.normalizer.typed_data in core/modules/serialization/serialization.services.yml
Drupal\serialization\Normalizer\TypedDataNormalizer

File

core/modules/serialization/src/Normalizer/TypedDataNormalizer.php, line 10

Namespace

Drupal\serialization\Normalizer
View source
class TypedDataNormalizer extends NormalizerBase {
  use SchematicNormalizerTrait;
  use JsonSchemaReflectionTrait;
  
  /**
   * {@inheritdoc}
   */
  public function doNormalize($object, $format = NULL, array $context = []) : array|string|int|float|bool|\ArrayObject|null {
    $this->addCacheableDependency($context, $object);
    $value = $object->getValue();
    // Support for stringable value objects: avoid numerous custom normalizers.
    if (is_object($value) && method_exists($value, '__toString')) {
      $value = (string) $value;
    }
    return $value;
  }
  
  /**
   * {@inheritdoc}
   */
  protected function getNormalizationSchema(mixed $object, array $context = []) : array {
    assert($object instanceof TypedDataInterface);
    $value = $object->getValue();
    $nullable = !$object->getDataDefinition()
      ->isRequired();
    // Match the special-cased logic in ::normalize().
    if (is_object($value) && method_exists($value, '__toString')) {
      return $nullable ? [
        'oneOf' => [
          'string',
          'null',
        ],
      ] : [
        'type' => 'string',
      ];
    }
    return $this->getJsonSchemaForMethod($object, 'getValue', [
      '$comment' => static::generateNoSchemaAvailableMessage($object),
    ], $nullable);
  }
  
  /**
   * {@inheritdoc}
   */
  public function getSupportedTypes(?string $format) : array {
    return [
      TypedDataInterface::class => TRUE,
    ];
  }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY constant Name of key for bubbling cacheability metadata via serialization context.
JsonSchemaReflectionTrait::getJsonSchemaForMethod protected function Get a JSON Schema based on method reflection.
NormalizerBase::$format protected property List of formats which supports (de-)normalization. 1
NormalizerBase::addCacheableDependency protected function Adds cacheability if applicable.
NormalizerBase::supportsDenormalization public function Implements \Symfony\Component\Serializer\Normalizer\DenormalizerInterface::supportsDenormalization() 1
NormalizerBase::supportsNormalization public function 1
SchematicNormalizerFallbackTrait::generateNoSchemaAvailableMessage public static function
SchematicNormalizerHelperTrait::checkFormat protected function
SchematicNormalizerTrait::normalize public function 2
TypedDataNormalizer::doNormalize public function Normalizes an object into a set of arrays/scalars. Overrides SchematicNormalizerTrait::doNormalize
TypedDataNormalizer::getNormalizationSchema protected function Retrieve JSON Schema for the normalization. Overrides SchematicNormalizerTrait::getNormalizationSchema
TypedDataNormalizer::getSupportedTypes public function Overrides NormalizerBase::getSupportedTypes

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