Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer::validateAndDenormalize PHP Method

validateAndDenormalize() private method

Validates the submitted data and denormalizes it.
private validateAndDenormalize ( string $currentClass, string $attribute, mixed $data, string | null $format, array $context ) : mixed
$currentClass string
$attribute string
$data mixed
$format string | null
$context array
return mixed
    private function validateAndDenormalize($currentClass, $attribute, $data, $format, array $context)
    {
        if (null === $this->propertyTypeExtractor || null === ($types = $this->propertyTypeExtractor->getTypes($currentClass, $attribute))) {
            return $data;
        }
        $expectedTypes = array();
        foreach ($types as $type) {
            if (null === $data && $type->isNullable()) {
                return;
            }
            if ($type->isCollection() && null !== ($collectionValueType = $type->getCollectionValueType()) && Type::BUILTIN_TYPE_OBJECT === $collectionValueType->getBuiltinType()) {
                $builtinType = Type::BUILTIN_TYPE_OBJECT;
                $class = $collectionValueType->getClassName() . '[]';
                if (null !== ($collectionKeyType = $type->getCollectionKeyType())) {
                    $context['key_type'] = $collectionKeyType;
                }
            } else {
                $builtinType = $type->getBuiltinType();
                $class = $type->getClassName();
            }
            $expectedTypes[Type::BUILTIN_TYPE_OBJECT === $builtinType && $class ? $class : $builtinType] = true;
            if (Type::BUILTIN_TYPE_OBJECT === $builtinType) {
                if (!$this->serializer instanceof DenormalizerInterface) {
                    throw new LogicException(sprintf('Cannot denormalize attribute "%s" for class "%s" because injected serializer is not a denormalizer', $attribute, $class));
                }
                if ($this->serializer->supportsDenormalization($data, $class, $format)) {
                    return $this->serializer->denormalize($data, $class, $format, $context);
                }
            }
            if (call_user_func('is_' . $builtinType, $data)) {
                return $data;
            }
        }
        throw new UnexpectedValueException(sprintf('The type of the "%s" attribute for class "%s" must be one of "%s" ("%s" given).', $attribute, $currentClass, implode('", "', array_keys($expectedTypes)), gettype($data)));
    }