normalizer = $normalizer; $this->discriminatorType = $discriminatorType; $this->discriminatorValue = $discriminatorValue; } public function normalize(array $attributes, string $format = 'docgen', ?array $context = [], ?ClassMetadata $classMetadata = null) { $data = []; $data['isNull'] = true; if (null !== $this->discriminatorType) { $data[$this->discriminatorType] = $this->discriminatorValue; } foreach ($attributes as $key => $class) { if (is_numeric($key)) { $data[$class] = ''; } else { switch ($class) { case 'array': case 'bool': case 'double': case 'float': case 'int': case 'resource': case 'string': case 'null': $data[$key] = ''; break; default: $data[$key] = $this->normalizer->normalize(null, $format, array_merge( $this->getContextForAttribute($key, $context, $classMetadata), ['docgen:expects' => $class] )); break; } } } return $data; } private function getContextForAttribute(string $key, array $initialContext, ?ClassMetadata $classMetadata): array { if (null === $classMetadata) { return $initialContext; } $attributeMetadata = $classMetadata->getAttributesMetadata()[$key] ?? null; if (null !== $attributeMetadata) { /** @var \Symfony\Component\Serializer\Mapping\AttributeMetadata $attributeMetadata */ $initialContext = array_merge( $initialContext, $attributeMetadata->getNormalizationContextForGroups( is_array($initialContext['groups']) ? $initialContext['groups'] : [$initialContext['groups']] ) ); } return $initialContext; } }