JsonSchemaReflectionTrait.php

Namespace

Drupal\serialization\Normalizer

File

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

View source
<?php

declare (strict_types=1);
namespace Drupal\serialization\Normalizer;

use Drupal\Core\Serialization\Attribute\JsonSchema;
trait JsonSchemaReflectionTrait {
    
    /**
     * Get a JSON Schema based on method reflection.
     *
     * @param object $object
     *   Object to reflect.
     * @param string $method
     *   Method to reflect.
     * @param array $fallback
     *   Fallback. Defaults to an empty array, which is a matches-all schema.
     * @param bool $nullable
     *   If a schema is returned from reflection, whether to add a null option.
     *
     * @return array
     *   JSON Schema.
     */
    protected function getJsonSchemaForMethod(mixed $object, string $method, array $fallback = [], bool $nullable = FALSE) : array {
        $schemas = [];
        if ((is_object($object) || class_exists($object)) && method_exists($object, $method)) {
            $reflection = new \ReflectionMethod($object, $method);
            $schemas = $reflection->getAttributes(JsonSchema::class);
        }
        if (count($schemas) === 0) {
            return $fallback;
        }
        $schemas = array_values(array_filter([
            array_map(fn($schema) => $schema->newInstance()
                ->getJsonSchema(), $schemas),
            $nullable ? [
                'type' => 'null',
            ] : NULL,
        ]));
        return count($schemas) === 1 ? current($schemas) : [
            'oneOf' => $schemas,
        ];
    }

}

Traits

Title Deprecated Summary
JsonSchemaReflectionTrait

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