Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. YamlFileLoader.php

function YamlFileLoader::loadClassMetadata

Same name in this branch
  1. 11.1.x vendor/symfony/validator/Mapping/Loader/YamlFileLoader.php \Symfony\Component\Validator\Mapping\Loader\YamlFileLoader::loadClassMetadata()

Overrides LoaderInterface::loadClassMetadata

File

vendor/symfony/serializer/Mapping/Loader/YamlFileLoader.php, line 37

Class

YamlFileLoader
YAML File Loader.

Namespace

Symfony\Component\Serializer\Mapping\Loader

Code

public function loadClassMetadata(ClassMetadataInterface $classMetadata) : bool {
    if (!($this->classes ??= $this->getClassesFromYaml())) {
        return false;
    }
    if (!isset($this->classes[$classMetadata->getName()])) {
        return false;
    }
    $yaml = $this->classes[$classMetadata->getName()];
    if (isset($yaml['attributes']) && \is_array($yaml['attributes'])) {
        $attributesMetadata = $classMetadata->getAttributesMetadata();
        foreach ($yaml['attributes'] as $attribute => $data) {
            if (isset($attributesMetadata[$attribute])) {
                $attributeMetadata = $attributesMetadata[$attribute];
            }
            else {
                $attributeMetadata = new AttributeMetadata($attribute);
                $classMetadata->addAttributeMetadata($attributeMetadata);
            }
            if (isset($data['groups'])) {
                if (!\is_array($data['groups'])) {
                    throw new MappingException(\sprintf('The "groups" key must be an array of strings in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName()));
                }
                foreach ($data['groups'] as $group) {
                    if (!\is_string($group)) {
                        throw new MappingException(\sprintf('Group names must be strings in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName()));
                    }
                    $attributeMetadata->addGroup($group);
                }
            }
            if (isset($data['max_depth'])) {
                if (!\is_int($data['max_depth'])) {
                    throw new MappingException(\sprintf('The "max_depth" value must be an integer in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName()));
                }
                $attributeMetadata->setMaxDepth($data['max_depth']);
            }
            if (isset($data['serialized_name'])) {
                if (!\is_string($data['serialized_name']) || '' === $data['serialized_name']) {
                    throw new MappingException(\sprintf('The "serialized_name" value must be a non-empty string in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName()));
                }
                $attributeMetadata->setSerializedName($data['serialized_name']);
            }
            if (isset($data['serialized_path'])) {
                try {
                    $attributeMetadata->setSerializedPath(new PropertyPath((string) $data['serialized_path']));
                } catch (InvalidPropertyPathException) {
                    throw new MappingException(\sprintf('The "serialized_path" value must be a valid property path in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName()));
                }
            }
            if (isset($data['ignore'])) {
                if (!\is_bool($data['ignore'])) {
                    throw new MappingException(\sprintf('The "ignore" value must be a boolean in "%s" for the attribute "%s" of the class "%s".', $this->file, $attribute, $classMetadata->getName()));
                }
                $attributeMetadata->setIgnore($data['ignore']);
            }
            foreach ($data['contexts'] ?? [] as $line) {
                $groups = $line['groups'] ?? [];
                if ($context = $line['context'] ?? false) {
                    $attributeMetadata->setNormalizationContextForGroups($context, $groups);
                    $attributeMetadata->setDenormalizationContextForGroups($context, $groups);
                }
                if ($context = $line['normalization_context'] ?? false) {
                    $attributeMetadata->setNormalizationContextForGroups($context, $groups);
                }
                if ($context = $line['denormalization_context'] ?? false) {
                    $attributeMetadata->setDenormalizationContextForGroups($context, $groups);
                }
            }
        }
    }
    if (isset($yaml['discriminator_map'])) {
        if (!isset($yaml['discriminator_map']['type_property'])) {
            throw new MappingException(\sprintf('The "type_property" key must be set for the discriminator map of the class "%s" in "%s".', $classMetadata->getName(), $this->file));
        }
        if (!isset($yaml['discriminator_map']['mapping'])) {
            throw new MappingException(\sprintf('The "mapping" key must be set for the discriminator map of the class "%s" in "%s".', $classMetadata->getName(), $this->file));
        }
        $classMetadata->setClassDiscriminatorMapping(new ClassDiscriminatorMapping($yaml['discriminator_map']['type_property'], $yaml['discriminator_map']['mapping']));
    }
    return true;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal