PrimitiveDataNormalizer.php

Same filename and directory in other branches
  1. 9 core/modules/serialization/src/Normalizer/PrimitiveDataNormalizer.php
  2. 8.9.x core/modules/serialization/src/Normalizer/PrimitiveDataNormalizer.php
  3. 10 core/modules/serialization/src/Normalizer/PrimitiveDataNormalizer.php

Namespace

Drupal\serialization\Normalizer

File

core/modules/serialization/src/Normalizer/PrimitiveDataNormalizer.php

View source
<?php

namespace Drupal\serialization\Normalizer;

use Drupal\Core\Field\FieldItemInterface;
use Drupal\Core\TypedData\PrimitiveInterface;

/**
 * Converts primitive data objects to their casted values.
 */
class PrimitiveDataNormalizer extends NormalizerBase {
    use SerializedColumnNormalizerTrait;
    
    /**
     * {@inheritdoc}
     */
    public function normalize($object, $format = NULL, array $context = []) : array|string|int|float|bool|\ArrayObject|null {
        // Add cacheability if applicable.
        $this->addCacheableDependency($context, $object);
        $parent = $object->getParent();
        if ($parent instanceof FieldItemInterface && $object->getValue()) {
            $serialized_property_names = $this->getCustomSerializedPropertyNames($parent);
            if (in_array($object->getName(), $serialized_property_names, TRUE)) {
                return unserialize($object->getValue());
            }
        }
        // Typed data casts NULL objects to their empty variants, so for example
        // the empty string ('') for string type data, or 0 for integer typed data.
        // In a better world with typed data implementing algebraic data types,
        // getCastedValue would return NULL, but as typed data is not aware of real
        // optional values on the primitive level, we implement our own optional
        // value normalization here.
        return $object->getValue() === NULL ? NULL : $object->getCastedValue();
    }
    
    /**
     * {@inheritdoc}
     */
    public function getSupportedTypes(?string $format) : array {
        return [
            PrimitiveInterface::class => TRUE,
        ];
    }

}

Classes

Title Deprecated Summary
PrimitiveDataNormalizer Converts primitive data objects to their casted values.

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