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

Breadcrumb

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

function AttributeLoader::loadClassMetadata

Same name in this branch
  1. 11.1.x vendor/symfony/serializer/Mapping/Loader/AttributeLoader.php \Symfony\Component\Serializer\Mapping\Loader\AttributeLoader::loadClassMetadata()

Overrides LoaderInterface::loadClassMetadata

File

vendor/symfony/validator/Mapping/Loader/AttributeLoader.php, line 30

Class

AttributeLoader
Loads validation metadata using PHP attributes.

Namespace

Symfony\Component\Validator\Mapping\Loader

Code

public function loadClassMetadata(ClassMetadata $metadata) : bool {
    $reflClass = $metadata->getReflectionClass();
    $className = $reflClass->name;
    $success = false;
    foreach ($this->getAttributes($reflClass) as $constraint) {
        if ($constraint instanceof GroupSequence) {
            $metadata->setGroupSequence($constraint->groups);
        }
        elseif ($constraint instanceof GroupSequenceProvider) {
            $metadata->setGroupProvider($constraint->provider);
            $metadata->setGroupSequenceProvider(true);
        }
        elseif ($constraint instanceof Constraint) {
            $metadata->addConstraint($constraint);
        }
        $success = true;
    }
    foreach ($reflClass->getProperties() as $property) {
        if ($property->getDeclaringClass()->name === $className) {
            foreach ($this->getAttributes($property) as $constraint) {
                if ($constraint instanceof Constraint) {
                    $metadata->addPropertyConstraint($property->name, $constraint);
                }
                $success = true;
            }
        }
    }
    foreach ($reflClass->getMethods() as $method) {
        if ($method->getDeclaringClass()->name === $className) {
            foreach ($this->getAttributes($method) as $constraint) {
                if ($constraint instanceof Callback) {
                    $constraint->callback = $method->getName();
                    $metadata->addConstraint($constraint);
                }
                elseif ($constraint instanceof Constraint) {
                    if (preg_match('/^(get|is|has)(.+)$/i', $method->name, $matches)) {
                        $metadata->addGetterMethodConstraint(lcfirst($matches[2]), $matches[0], $constraint);
                    }
                    else {
                        throw new MappingException(\sprintf('The constraint on "%s::%s()" cannot be added. Constraints can only be added on methods beginning with "get", "is" or "has".', $className, $method->name));
                    }
                }
                $success = true;
            }
        }
    }
    return $success;
}

API Navigation

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