trait SchematicNormalizerTrait

Trait for normalizers which can also provide JSON Schema.

To implement this trait, convert the existing normalizer's ::normalize() method to ::doNormalize().

Due to trait inheritance rules, this trait cannot be used with normalizers which call parent::normalize() during normalization (will result in infinite recursion). Instead, use SchematicNormalizerHelperTrait and conditionally call ::getNormalizationSchema() in ::normalize(). See DateTimeIso8601Normalizer::normalize() for an example.

Hierarchy

5 files declare their use of SchematicNormalizerTrait
FieldItemNormalizer.php in core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php
FieldNormalizer.php in core/modules/jsonapi/src/Normalizer/FieldNormalizer.php
JsonApiDocumentTopLevelNormalizer.php in core/modules/jsonapi/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
RelationshipNormalizer.php in core/modules/jsonapi/src/Normalizer/RelationshipNormalizer.php
ResourceObjectNormalizer.php in core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php

File

core/modules/serialization/src/Normalizer/SchematicNormalizerTrait.php, line 19

Namespace

Drupal\serialization\Normalizer
View source
trait SchematicNormalizerTrait {
    use SchematicNormalizerHelperTrait;
    use SchematicNormalizerFallbackTrait;
    
    /**
     * {@inheritdoc}
     */
    public function normalize($object, $format = NULL, array $context = []) : array|string|int|float|bool|\ArrayObject|null {
        if ($format === 'json_schema') {
            return $this->getNormalizationSchema($object, $context);
        }
        return $this->doNormalize($object, $format, $context);
    }
    
    /**
     * Normalizes an object into a set of arrays/scalars.
     *
     * @param mixed $object
     *   Object to normalize.
     * @param string|null $format
     *   Format the normalization result will be encoded as.
     * @param array $context
     *   Context options for the normalizer.
     *
     * @return array|string|int|float|bool|\ArrayObject|null
     *   The normalization. An \ArrayObject is used to make sure an empty object
     *   is encoded as an object not an array.
     */
    protected abstract function doNormalize($object, $format = NULL, array $context = []) : array|string|int|float|bool|\ArrayObject|null;
    
    /**
     * {@inheritdoc}
     */
    protected function getNormalizationSchema(mixed $object, array $context = []) : array {
        return $this->getJsonSchemaForMethod($this, 'doNormalize', [
            '$comment' => static::generateNoSchemaAvailableMessage($object),
        ]);
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title Overrides
JsonSchemaReflectionTrait::getJsonSchemaForMethod protected function Get a JSON Schema based on method reflection.
SchematicNormalizerFallbackTrait::generateNoSchemaAvailableMessage public static function
SchematicNormalizerHelperTrait::checkFormat protected function
SchematicNormalizerTrait::doNormalize abstract protected function Normalizes an object into a set of arrays/scalars. 10
SchematicNormalizerTrait::getNormalizationSchema protected function Retrieve JSON Schema for the normalization. Overrides SchematicNormalizerHelperTrait::getNormalizationSchema 9
SchematicNormalizerTrait::normalize public function 2

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